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函数返回,最好加上
}
改为while(scanf("%d %d %c %d",&a,&b,&ch,&d)!=EOF)
因为空格也算char类型,这样导致空格字符让ch变量接收了,导致d没有赋值,c也没法计算,程序运行出错。
或者你将输入改为1 1+2也可以。
你可以按F10逐句调试程序,跟踪每个变量的变化,查找出错原因。
可是scanf不是自动会空格的么,平时都不用这样的啊
那是因为你平时输入的是数字 %c 会接收空格的 因为空格也是字符的
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完成读操作,同时回车键进入缓冲区。