解题思路:
这道题目有很多的限制,完全可以拿来好好利用。
“每道题目(包括弟弟的答案)的 格式为 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 人评分
char eq; int right = 0; struct home { int a, b, c; char d; }; int main() { home ques[100]; for (int n = 0; n < 100; n++) { scanf_s("%d%c%d=%d", &ques[n].a, &ques[n].d, &ques[n].b, &ques[n].c);//为什么这样不行。 getchar(); if (ques[n].b == '+') { if (ques[n].c = ques[n].a + ques[n].b) { right++; } } if (ques[n].b == '-') { if (ques[n].c = ques[n].a - ques[n].b) { right++; } } } printf("%d", right); } 大神,我为啥在vs里连表达式都输不出?就是输入第一个表达式就出错了。。。。。
mirage 2019-05-09 18:19:29 |
你这个错误很多吧,刷题不要用vs,推荐用DEV-C++。scanf_s是vs里面的,不是C语言标准里面的,声明结构体用struct home ques[100]; 而你那样声明在我电脑上直接报错了,还有==写成=,d写成b......等等错误。稍微给你改了改:#include <stdio.h> char eq; int right = 0; struct home { int a, b, c; char d; }; int main() { int n; struct home ques[3]; for (n = 0; n < 3; n++) { scanf("%d%c%d=%d", &ques[n].a, &ques[n].d, &ques[n].b, &ques[n].c); getchar(); if (ques[n].d == '+' && ques[n].c == ques[n].a + ques[n].b) { right++; }else if (ques[n].d == '-' && ques[n].c == ques[n].a - ques[n].b) { right++; } } printf("%d", right); }
mirage 2019-05-09 18:20:36 |
不知道为啥不能回车,复制过去自己换行看看吧...233333333
灵珂 2019-05-11 13:23:35 |
@mirage915 谢谢,受教了!
我也没很明白,以下是我测试过后的猜测: char op; int a, b, c = 0, d; while(~(d = scanf("%d%c%d=%d", &a, &op, &b, &c))) { printf("test\n"); i++; if(i == 10) { printf("%d\n", i); char q = getchar(); printf("%c", q); } } 当输入1+1=? 时,输入的字符被存入缓冲,scanf方法扫描到前四个字符并成功赋值,当扫描到 ? 时,由于类型不匹配,保留了c的初始值0,然后执行循环体,此时d==3,成功匹配3个变量的值; 下一次循环中,scanf方法再次扫描,缓存中还是 ? 没有被取走,第一个赋值 a 就已经失败了,后续不再赋值,a,op,b,c保留之前的值,d==0,成功匹配0个变量的值,进入循环体; 也就是说,缓存中的 ? 始终没有被取走,陷入了死循环。 上文作者判断d==3时,用getchar()取走缓存中不被 c 匹配的 ?,因此可以继续输入。 为了验证猜测,我在上述代码中输入 1+1=? ,在循环十次后用getchar()取出缓存,结果q=='?',也就是迟迟不被匹配的那个? 把?换成其他非整型字符也成立。
我输入?后 后续就不能再输入算式了
简单的a+b (C语言代码)浏览:676 |
C语言训练-排序问题<2> (C++代码)浏览:935 |
C语言训练-计算1~N之间所有奇数之和 (C语言代码)浏览:689 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:790 |
WU-蓝桥杯算法提高VIP-企业奖金发放 (C++代码)浏览:1267 |
WU-字符串比较 (C++代码)浏览:824 |
1009题解浏览:802 |
printf基础练习 (C语言代码)浏览:2268 |
母牛的故事 (C语言代码)浏览:519 |
10月月赛题解浏览:554 |
Monics 2019-10-26 12:16:47 |
把if(k==3)删除 他这里多此一举 ,然后就行了
需要努力的97 2020-02-26 21:06:51 |
@Monics 还是不行