解题思路:



这道题目有很多的限制,完全可以拿来好好利用。


“每道题目(包括弟弟的答案)的 格式为 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);
 }


点赞(41)
 

0.0分

100 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 59 条评论

419464537 5年前 回复TA
这个答案错了,可以试试1+1=0
恪雾 5年前 回复TA
不是很明白getchar的作用,如果是读取回车为什么是k==3而不是k==4呢
chenxizhan 5年前 回复TA
厉害
Tourist 5年前 回复TA
@Tourist 谢谢,我懂了
惊蛰 5年前 回复TA
第二个else if会导致一个BUG,比如5+1=4在这个代码中判断就是对的
Monics 5年前 回复TA
@Talog 把if(k==3)删除 他这里多此一举 ,然后就行了
pingfan443 5年前 回复TA
@Tourist k用来读取scanf函数的返回值,~代表取反  还是不懂可以去看 训练题第一道题的题解  第一个人讲的很详细 关于scanf函数的返回值 以及文件的结尾
Tourist 5年前 回复TA
while(~(k=scanf("%d%c%d=%d",&a,&op,&b,&c)))


大佬,这句是干什么用的吖
newfish 5年前 回复TA
这个确实,把scanf用透了
Lay 5年前 回复TA
while(~(
这里的~是要取反吗?