解题思路:
这道题目有很多的限制,完全可以拿来好好利用。
“每道题目(包括弟弟的答案)的 格式为 a+b=c 或者 a-b=c,其中a和b是作业中给出的,均为不超过100的非负整数;c是弟弟算出的答案,可能是不超过200的非负整数,也可能是单个字符"?",表示他不会算。”
“输入文件包含不超过100行,以文件结束符结尾。每行包含一道题目,格式保证符合上述规定,且不包含任何空白字符。输入的所有整数均不含前导0。”
1.直接按照格式 scanf("%d%c%d=%d",&a,&op,&b,&c) 读取。
2.判断读入是否正常,不正常 则清除缓冲区,继续下一次读入。
正常 则判断计算,计算正确得分加一。
参考代码:
#include<stdio.h> main() { char op; int a,b,c,k,score=0; while(~(k=scanf("%d%c%d=%d",&a,&op,&b,&c))){ if(k==3) getchar();//读取缓存区回车 else if(op=='+' && c==a+b) score++; else if(c==a-b) score++; } printf("%d",score); }
0.0分
124 人评分
#include<stdio.h> int main() { int a = 0; int b = 0; int c = 0; char sign = 0; int count = 0; int k = 0; while ((k = scanf("%d%c%d=%d", &a, &sign, &b, &c)) == 4) { if (k < 4) getchar(); else if ((c = a + b && sign == '+') || (c = a - b && sign == '-')) count++; } printf("%d\n", count); return 0; } 我这个到底哪错了
#include<stdio.h> int fun(int a,char op,int b) { int c=0; switch(op) { case '+': c=a+b; break; case '-': c=a-b; break; } return c; } int main() { int a=0,b=0,num=0; char op,ch; while(~scanf("%d%c%d=%c",&a,&op,&b,&ch)) { if(ch=='?') { continue; } else { if((ch-'0')==fun(a,op,b)) { num++; } } } printf("%d",num); return 0; } 大佬帮忙看一下这个哪里错了
为什么对留在缓冲区的\n没有任何反应?
想问一下,为什么要有“getchar()”啊,没有就是错的?
凯特烦恼 2021-10-29 16:08:56 |
因为需要四个参数, 你输入了三个, 还少一个, 用getchar()代替了第四个, 不然下道题输入的数是上道题的第四个参数。
有卷的心的菜鸡 2021-11-21 18:51:01 |
getchar是用来读取回车符号的,如果不加getchar,那你下一次输入时回车符就给了第二个op了,最终导致错误
随心 2022-02-07 17:18:29 |
@1595664282 好像不是你说的那样,不然的话为什么只有当k==3时才用getchar呢,应该就像上面那个朋友说的:因为需要四个参数, 你输入了三个, 还少一个, 用getchar()代替了第四个, 不然下道题输入的数是上道题的第四个参数。因为按照你的说法的话应该每一行都执行getchar。
Shineld 2022-04-15 11:47:28 |
用来读问号的吧。。。没那么复杂
Monkey 2022-09-03 10:07:06 |
他给的注释确实是错的,那个getchar()是用来读?的,如果是不会那种情况c不会读取?,?就留在缓冲区,如果不把他吃掉后面都读不了。至于读回车,scanf输入整数时会自动跳过回车空格啥的,没影响。
想问一下大佬为什么是错的 #include<stdio.h> int main() { int a,b,c,count=0; char s; while(scanf("%d%c%d=%d",&a,&s,&b,&c)&&a!=EOF&&b!=EOF&&c!=EOF) {if(s=='+'&&c==a+b)count++; if(s=='-'&&c==a-b)count++; } printf("%d",count); return 0; }
Sapphire 2022-02-23 10:34:19 |
#include<stdio.h> #include<stdlib.h> int main() { int a,b; char c; char d[3]; int k; int count=0; while(~(k=scanf("%d%c%d=%s",&a,&c,&b,d))) { if((a>=0&&a<=100)&&(b>=0&&b<=100)) { if((c=='+')&&(a+b==atoi(d)))count++; if((c=='-')&&(a-b==atoi(d)))count++; } } printf("%d",count); return 0; } 这样改就对了,可以来看一下我的文章。
#include<stdio.h> int main() { int a,b,c,score=0,k,j=0; char p, q; while(k=scanf("%d%c%d%c%d",&a,&q,&b,&p,&c)) { if(++j>100) break; getchar(); if(k==5) { if(q=='+'&&c==a+b) score++; if(q=='-'&&c==a-b) score++; } } printf("%d\n",score); }
zqz 2021-02-06 17:18:15 |
说真的,作者这个思路是很棒的,给了我很多收获,特别是对scanf函数不一样的用法,非常感谢!
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:900 |
IP判断 (C语言代码)浏览:592 |
一元一次方程 (C语言代码)浏览:4245 |
淘淘的名单 (C语言代码)浏览:1309 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:854 |
【计算球体积】 (C语言代码)浏览:1619 |
汽水瓶 (C语言代码)浏览:579 |
C二级辅导-分段函数 (C语言代码)浏览:790 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:1260 |
回文数(一) (C语言代码)浏览:1170 |