#include<stdio.h>
void main()
{
float a,b,e,f,g,h;
int i,j,k;
char c;
scanf("%f%f%c",&a,&b,&c);
if(c=='*')
e=a*b;
printf("%f",e);
else
if(c=='+')
f=a+b;
printf("%f",f);
else
if(c=='-')
g=a-b;
printf("%f",g);
else
if(c=='/')
h=a/b;
printf("%f",h);
else
if (c=='%')
j=(a*10)/10;
k=(b*10)/10;
i=j%k;
printf("%f",i);
}
出现错误illegal else without matching if
C语言问题大家帮忙打打括号
答案:5 悬赏:10
解决时间 2021-03-08 05:01
- 提问者网友:敏感魔鬼
- 2021-03-07 21:08
最佳答案
- 二级知识专家网友:陪衬角色
- 2021-03-07 22:04
#include<stdio.h>
void main()
{
float a,b,e,f,g,h;
int i,j,k;
char c;
scanf("%f%c%f",&a,&c,&b);//这个最好改成···· 这样可以直接输入2+3.。。
if(c=='*')
{
e=a*b;
printf("%f",e);
}//if和else 之间只能有一句语句,如果大于一句的话,要用花括号,表示一句复杂语句
else if(c=='+')//你这里表示的是else if。这两个不能换行。要放在一起,并格一个空格。换行的话,意思变了
{
f=a+b;
printf("%f",f);
}//这个花括号同理。在if和 else if里也只能有一个语句
else if(c=='-')
{
g=a-b;
printf("%f",g);
}
else if(c=='/')
{
h=a/b;//建议里面加一个判断字母为0的。用一个嵌套if就可以了
printf("%f",h);
}
else if (c=='%')
{
j=(a*10)/10;
k=(b*10)/10;
i=j%k;
printf("%f",i);
}
}
还不明白hi我
void main()
{
float a,b,e,f,g,h;
int i,j,k;
char c;
scanf("%f%c%f",&a,&c,&b);//这个最好改成···· 这样可以直接输入2+3.。。
if(c=='*')
{
e=a*b;
printf("%f",e);
}//if和else 之间只能有一句语句,如果大于一句的话,要用花括号,表示一句复杂语句
else if(c=='+')//你这里表示的是else if。这两个不能换行。要放在一起,并格一个空格。换行的话,意思变了
{
f=a+b;
printf("%f",f);
}//这个花括号同理。在if和 else if里也只能有一个语句
else if(c=='-')
{
g=a-b;
printf("%f",g);
}
else if(c=='/')
{
h=a/b;//建议里面加一个判断字母为0的。用一个嵌套if就可以了
printf("%f",h);
}
else if (c=='%')
{
j=(a*10)/10;
k=(b*10)/10;
i=j%k;
printf("%f",i);
}
}
还不明白hi我
全部回答
- 1楼网友:萌萌哒小可爱
- 2021-03-08 02:33
{}的话就是一个IF后面一个{};
还有其它修改一下数据类型的转换方式及输出格式,
#include<stdio.h>
void main()
{
float a,b,e,f,g,h;
int i,j,k;
char c;
scanf("%f %c%f",&a,&c,&b);
if(c=='*')
{
e=a*b;
printf("%.2f\n",e);
}
else if(c=='+')
{
f=a+b;
printf("%.2f\n",f);
}
else if(c=='-')
{
g=a-b;
printf("%.2f\n",g);
}
else if(c=='/')
{
h=a/b;
printf("%.2f\n",h);
}
else if(c=='%')
{
j=(int)a;
k=(int)b;
i=j%k;
printf("%d\n",i);
}
}
你对比看一下吧!
- 2楼网友:颜值超标
- 2021-03-08 00:56
#include<stdio.h>
void main()
{
float a,b,e,f,g,h;
int i,j,k;
char c;
scanf("%f%f%c",&a,&b,&c);
if(c=='*')
{
e=a*b;
printf("%f",e);
}
else
{
if(c=='+')
{
f=a+b;
printf("%f",f);
}
else
{
if(c=='-')
{
g=a-b;
printf("%f",g);
}
else
{
if(c=='/')
{
h=a/b;
printf("%f",h);
}
else
{
if (c=='%')
{
j=(a*10)/10;
}
k=(b*10)/10;
i=j%k;
printf("%f",i);
}
}
}
}
}
- 3楼网友:野性且迷人
- 2021-03-07 23:18
5分??
未免也太少了吧?
你这代码问题也不少:
1,函数声明与函数的定义不一致,声明的函数是int型返回值,而定义的却是void型返回值。
2,结构体名称写错,使用的结构体的名称不是定义的结构体的名称。
3,调用函数时,函数名写错,不是你定义的那个函数的名称。
4,函数的参数类型与你调用函数时传入的参数类型不一致,函数支持的参数是字符串类型,你传的却是单字符类型。
5,把变量名当成字符串用,变量名两边加上单引号就不是那个变量了,而是一个字符常量。
6,用#include去包含cpp文件,虽然是可以,但不推荐这样用,应该新建一个h文件,把函数的声明以及#define宏定义写进去,之后,#include "你的头文件.h"即可。
7,代码编写风格不怎么好,虽然不是大问题,但影响代码的可读性,建议格式化代码。
花费了这么多时间为你修改/调试代码,不采纳答案那还真对不起我了。
以下内容,请看完,建议复制粘贴到代码编辑器里,重新格式化代码,方便阅读。
假设头文件为: stack_sq.h
那么,它的内容应该为:
//宏定义
#define true 1
#define false 0
#define ok 1
#define error 0
#define stack_size 50
typedef char stackelementtype;
//定义结构体
typedef struct // 顺序栈
{
stackelementtype elem[stack_size]; // 用来存放栈中元素的一维数组
int top; // 用来存放栈顶元素的下标,top为-1表示空栈
}
seqstack;
//以下声明函数原型
void initstack(seqstack *s);
int isempty(seqstack *s);
int isfull(seqstack *s);
int push(seqstack *s, stackelementtype x);
int pop(seqstack *s, stackelementtype *x);
int gettop(seqstack *s,stackelementtype *x);
int clearstack(seqstack *s);
头文件写好了,之后在stack_sq.cpp中写上以下内容:
#include "stack_sq.h" //包含头文件,使用头文件中的宏定义以及结构体的定义
void initstack(seqstack *s)
{ // 将s初始化为一个空栈
s->top = -1;
}
int isempty(seqstack *s)
{ // 判断栈s是否为空栈,是返回true,否则返回false
return(s->top==-1 ? true : false);
}
int isfull(seqstack *s)
{ // 判断栈s是否已满,是返回true,否则返回false
return(s->top==stack_size-1 ? true : false);
}
int push(seqstack *s, stackelementtype x)
{ // 将数据元素x进栈s
if (s->top==stack_size-1) return(false); // 栈已满
s->top++;
s->elem[s->top] = x;
return(true);
}
int pop(seqstack *s, stackelementtype *x)
{ // 将栈s的栈顶元素出栈,放到x中
if (s->top==-1) return(false); // 栈为空
*x = s->elem[s->top];
s->top--; // 修改栈顶指针
return(true);
}
int gettop(seqstack *s,stackelementtype *x)
{ // 取栈s的栈顶元素,放到x中
if (s->top==-1) return(false); // 栈为空
*x = s->elem[s->top];
return(true);
}
int clearstack(seqstack *s)
{ //将栈s制成空栈
s->top = -1;
return(true);
}
最后,在你的main.cpp中写上以下内容:
#include <stdio.h>
#include <stdlib.h>
#include "stack_sq.h" //包含头文件,使用头文件中的宏定义以及结构体的定义
int bracketmatch(char *str);
//错误:bracketmatch函数的声明和调用都是int型的返回值,而定义却是void型的
int march(char ch,char str[]);
int main()
{
char str[100];
printf("please input a string:"); gets(str);
//bracketmatch()函数需要有返回值,不能用void,不然怎么根据返回值来判断括号是否匹配???
//当bracketmatch()函数返回值为1时,也就是是为“真”,显示的字符串为:"括号匹配"
// 当bracketmatch()函数返回值为0时,也就是是为“假”,显示的字符串为:"括号不匹配"
printf("%s\n", bracketmatch(str) ? "括号匹配" : "括号不匹配");
getchar();
getchar();
return 1;
}
//int march(char ch,char str[])
//{ //判断两个括号是否匹配
//错误:if ('ch'-'str[i]'==1||'ch'-'str[i]'==-1||'ch'-'str[i]'==2||'ch'-'str[i]'==-2)
//你这变量名加单引号就不是变量名了,而是一个字符常量的内容,一个字符用单引号,字符串就用双引号
// 改正后为:
//if (ch - str[i] ==1 || ch - str[i] == -1 || ch - str[i] == 2 || ch - str[i] == -2)
// return 1;
//还有,你这个变量i从哪里来的?在哪里定义的?
//else return 0;
//}
//以下是重新修改后的march函数:
int march(char ch1,char ch2)
{ //判断两个括号是否匹配
if (ch1 - ch2 == 1 || ch1 - ch2 == -1 || ch1 - ch2 == 2 || ch1 - ch2 == -2)
return 1;
else return 0;
}
//void bracketmatch(char *str) 声明的是int型,你这定义却是void型的,不统一!
//改正后为:
int bracketmatch(char *str)
{
//错误:stack s;
//stack类型你定义了吗? 唯一定义的是seqstack结构体。
//改正后为:
seqstack s;
int i;
char ch;
initstack(&s);
for(i=0;str[i]!='\0';i++)
{
switch(str[i])
{
case'(':
case'[':
case'{':
push(&s,str[i]);
break;
case')':
case']':
case'}':
if(isempty(&s))
{
printf("\n右括号多余!");
return 0;
}
else
{
gettop(&s,&ch);
//错误:if(match(ch,str[i]))
//有match()函数吗?没定义,你定义的是 march函数,名字写错了
//改正后为:
if(march(ch, str[i]))
//但是,参数有问题,str[i]指的是字符串变量str中第i个元素,而这个元素只保存单个字符,不能保存字符串
pop(&s,&ch);
else
{
printf("\n对应的左右括号不同类!");
return 0;//返回0,表示“假”
}
}
}
}
if(isempty(&s))
{
printf("\n括号匹配!");
return 1;//返回1,表示“真”
}
else
{
printf("\n左括号多余!");
return 0;
}
}
编译时,将main.cpp和stack_sq.cpp编译,之后链接成一个可执行文件。
有什么问题继续追问,不要一直拖到问题过期。
- 4楼网友:都不是誰的誰
- 2021-03-07 23:05
if(c=='*')
{
e=a*b;
printf("%f",e);
}
else if(c=='+')
{
f=a+b;
printf("%f",f);
}
else if(c=='-')
{
g=a-b;
printf("%f",g);
}
else if(c=='/')
{
h=a/b;
printf("%f",h);
}
else if (c=='%')
{
j=(a*10)/10;
k=(b*10)/10;
i=j%k;
printf("%f",i);
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯