解题思路:



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


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

Talog 5年前 回复TA
大佬你这个程序我在devc++里运行怎么没输出啊&……
javaersang 5年前 回复TA
问一下scanf里输入‘=’是什么高深的东西   不太懂
灵珂 5年前 回复TA
@灵珂 @mirage915 谢谢,受教了!
mirage 5年前 回复TA
@灵珂 不知道为啥不能回车,复制过去自己换行看看吧...233333333
mirage 5年前 回复TA
@灵珂 你这个错误很多吧,刷题不要用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); }
灵珂 5年前 回复TA
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 5年前 回复TA
@wojiaojd @wojiaojd 谢谢
wojiaojd 5年前 回复TA
@wojiaojd @mirage915 你的代码很漂亮
mirage 5年前 回复TA
@wojiaojd %d会自动忽略空格 回车等空白字符的。
mirage 5年前 回复TA
@wojiaojd 你说的对,我之前写的是if(k==3) getchar();//读取缓存区回车 ,,,是我写错了,的确是读取'?'。