中易网

C语言问题大家帮忙打打括号

答案:5  悬赏:10  
解决时间 2021-03-08 05:01
#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
最佳答案
#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我
全部回答
{}的话就是一个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); } } 你对比看一下吧!
#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); } } } } }
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编译,之后链接成一个可执行文件。 有什么问题继续追问,不要一直拖到问题过期。
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); }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
AR16-FRO1B-20 液压泵是往复式还是回转式 有
武进大成工贸公司在什么地方啊,我要过去处理
恋之甲地址在什么地方,想过去办事
图片上的文字是怎么弄的?哪个软件可以弄?
新电信手机卡有没有手机上网不限了流量多少钱
中国哪里的风景好而且漫展办的也棒
活动过后总结怎么写
绝味鸭脖普罗旺斯店地址在什么地方,想过去办
36和八的最小公倍数是什么?
为什么灌篮高手看多少遍都不会厌倦,我看了4
我是一名学生, 我想写一份贫困补助申请书 家
移动卡有什么优惠活动,包月卡有哪些,哪些比
银行卡只剩几十块钱,三四年不用了会怎么样
她的朋友离开了她 如何劝她不要伤心
包装机械售后人员都做什么工作?
推荐资讯
我车险投的人保 上个月出险一万五 明年车险要
医院感染的接触隔离的名词解释,求解,
中国邮政储蓄银行大厦A(东南门)在什么地方啊
爱尚手艺人发型工作室地址在哪,我要去那里办
创业百货商场我想知道这个在什么地方
生化危机6据说是最后一部,额各位觉得会不会
在南宁电动车怎么样上牌快点?
科沃兹底盘多高啊,会不会磕碰
颜色在不同国家的差异
一位物理学家被女伯爵批评的是谁
银色的漆皮皮鞋划了,怎么办
技嘉主板H81M-D2最高配什么型号的显卡
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?