解题思路:



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


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

wojiaojd 5年前 回复TA
我也没很明白,以下是我测试过后的猜测:
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=='?',也就是迟迟不被匹配的那个?
把?换成其他非整型字符也成立。
mirage 5年前 回复TA
@酷酷哒的乔治 输入Ctrl + Z
mirage 5年前 回复TA
@cpython3 Ctrl + Z
酷酷哒的乔治 5年前 回复TA
伤脑筋。。大神。。怎样可以退出循环输出值
cpython3 6年前 回复TA
怎样才能在编译器上出结果,输什么值会出循环???
cpython3 6年前 回复TA
太牛逼了,这脑洞!
mirage 6年前 回复TA
@likky 我测试的是可以输入的,可能你输入的是中文问号?
likky 6年前 回复TA
@likky 没有getchar()遇到?会崩溃……但是还是能通过
likky 6年前 回复TA
我输入?后 后续就不能再输入算式了