解题思路:



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


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

諾言╮ 4年前 回复TA
@Tourist @AmosAlbert ?
諾言╮ 4年前 回复TA
@Tourist 那可不可以写成scanf("%d%c%d=%d",&a,&op,&b,&c)!=EOF
諾言╮ 4年前 回复TA
@恪雾 @1303104325 缓冲区?
偏振光 4年前 回复TA
试了一下,感觉这个程序还是很优秀,虽然在第二个else if那逻辑出现了问题(应该是考虑op='-',不然所有a+a=0的算式都算对。)但总的来看还是学了不少东西。
1.对于while判断条件取反,我试了下,这里scanf语句的返回值即k 有-1,0,1,2,3,4这些值,其中只有0才能终止循环,取反后-1对应0;0对应-1;1,2,3,4取反对应-2,要终止循环,就得输入文件结束符,Ctrl+z,使得k=-1,取反后为0。
2.对于k=3,这里为什么不是k=4,因为有可能结果为?,不是int类型,所以读取会出错,这时读取的值是3。另外排除了0,1,2等乱七八糟的情况。
哈哈哈 4年前 回复TA
@419464537 第三个if再加一句op==‘-’就可以了
MyShrimp 4年前 回复TA
@likky 打扰了,我有个地方输错了
MyShrimp 4年前 回复TA
@likky 兄弟,我也陷入死循环了,你这个咋解决的
编程院梁博士 4年前 回复TA
@419464537 这个是因为一开始score初始化为0,1+1=0都不符合下面条件最后打印出0来了
hong豪 4年前 回复TA
@恪雾 getcha( )r函数的作用是从缓冲区中读取一个字符,并返回一个整数(该字符的编码),在这一道题中getchar( )是从缓冲区中获取“=”字符,以方便后面scanf() 函数获取整数
需要努力的97 4年前 回复TA
@Talog @Monics 还是不行