c语言 简单题 急急急急!!帮忙看一下哪里错了,谢谢!!

输入
1 1 + 2
1 1 * 1
输出
Yes
No
#include<stdio.h>
int main()
{
int a,b,c,d;
char ch;
while(scanf("%d%d%c%d",&a,&b,&ch,&d)!=EOF)
{
if(ch=='+')c=a+b;
else if(ch=='-')c=a-b;
else if(ch=='*')c=a*b;
else if(ch=='/')c=a/b;
if(c==d)printf("Yes\n");
else printf("No\n");
}
}
就是加减乘除 结果的判断
输入
1 1 + 2 //判断1+1 是否等于2
1 1 * 2
输出
Yes
No //上面打错了不好意思

我简单写了一下,楼主看看是不是这个意思。

有问题再问

因为你要分行,所以是要用数组保存结果的对错的,如果你可以接受不分行,就可以不用数组

 

 

#include<stdio.h>

int main()

{

  int a,b,c,d;

  char ch;


 

  int count=0;         //多少个算式

  bool s[100];         //用数组记录每个算式的对错.

  int  i=0;

  while(scanf("%d %d %c %d",&a,&b,&ch,&d)!=EOF)    //你的scanf里面没有空格哦,要结束输入,

                                                                                        //按CTRL+Z,回车,就行了

  {


 

   count++;

   if(ch=='+')c=a+b;

   else if(ch=='-')c=a-b;

   else if(ch=='*')c=a*b;

   else if(ch=='/')c=a/b;   //这里的除法你自己注意修改,

          //如果b是0的情况下呢?考虑过吗


 

   if(c==d)

    s[i++]=true;

   else 

    s[i++]=false;


 

   fflush(stdin);   //这句是清空输入缓冲区里面的内容,不加上容易有问题

  }

  i=0;

  while(count--)

  {

  if (s[i++] == true)

  {

   printf("Yes\n");

  }

  else

  {

   printf("No\n");

  }

   

  }

  return 0;       //main函数返回,最好加上

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-11

#include<stdio.h>
int main()

 int a,b,c,d; 
 char ch; 
 while(scanf("%d,%d,%c,%d",&a,&b,&ch,&d)!=EOF) 
 { 
  if(ch=='+')
   c=a+b; 
  else if(ch=='-')
   c=a-b; 
  else if(ch=='*')
   c=a*b; 
  else if(ch=='/')
   c=a/b;
 if(c==d)
   printf("Yes\n");   
  else 
   printf("No\n");
 }
   return 0;
}

那个scanf对字符比较敏感,真的会把空格当成符号的所以加个逗号

第2个回答  2012-12-11
将 while(scanf("%d%d%c%d",&a,&b,&ch,&d)!=EOF)
改为while(scanf("%d %d %c %d",&a,&b,&ch,&d)!=EOF)
因为空格也算char类型,这样导致空格字符让ch变量接收了,导致d没有赋值,c也没法计算,程序运行出错。
或者你将输入改为1 1+2也可以。
你可以按F10逐句调试程序,跟踪每个变量的变化,查找出错原因。
第3个回答  2012-12-11
"%d%d%c%d" 没有接收字符分割的标示 当你输入1和+之间的空格时,程序把空格读取到ch中了 故结果有误追问

可是scanf不是自动会空格的么,平时都不用这样的啊

追答

那是因为你平时输入的是数字 %c 会接收空格的 因为空格也是字符的

第4个回答  2012-12-11
#include<stdio.h>
int main()
{
int a,b,c,d;
char ch;
while(printf("请输入要计算的数字\n"),scanf("%d,%d%,c%,d",&a,&b,&ch,&d)!=EOF)
{ getchar();
getchar();
getchar();
getchar();
if(ch=='+')c=a+b;
else if(ch=='-')c=a-b;
else if(ch=='*')c=a*b;
else if(ch=='/')c=a/b;
if(c==d)printf("Yes\n");
else printf("No\n");
}
}
主要是当你第二次调用scanf()时,它会直接读到上次按下的回车键。追问

为什么会这样啊

追答

因为程序是从缓冲区读取的字符,当我们按下回车键时,scanf完成读操作,同时回车键进入缓冲区。

本回答被提问者采纳
相似回答