解题思路:



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


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

隐世 10月前 回复TA
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	char sign = 0;
	int count = 0;
	int k = 0;
	while ((k = scanf("%d%c%d=%d", &a, &sign, &b, &c)) == 4)
	{
		if (k < 4)
			getchar();
		else if ((c = a + b && sign == '+') || (c = a - b && sign == '-'))
			count++;
	}
	printf("%d\n", count);

	return 0;
}
我这个到底哪错了
蓝鸿翔 1年前 回复TA
#include<stdio.h>
int fun(int a,char op,int b)
{
    int c=0;
    switch(op)
	{
	    case '+':
	    c=a+b;
	    break;
	    case '-':
	    c=a-b;
	    break;
	}
	return c;
}
int main()
{
	int a=0,b=0,num=0;
	char op,ch;
	while(~scanf("%d%c%d=%c",&a,&op,&b,&ch))
	{
	if(ch=='?')
	{
	    continue;
	}
	else
	{
	    
	    if((ch-'0')==fun(a,op,b))
	    {
	        num++;
	    }
	}
	}
	printf("%d",num);
	return 0;
}
大佬帮忙看一下这个哪里错了
Hun9ry 2年前 回复TA
@长寿师兄 如果不吸收?号的话程序就找不到%d%d%c%d顺序的语句,会死循环的
Hun9ry 2年前 回复TA
@长寿师兄 留下的是带?的语句,scanf在遇到%d开头的输入时会略过空格或者换行符等等字符的
Monkey 2年前 回复TA
@Akihi 他给的注释确实是错的,那个getchar()是用来读?的,如果是不会那种情况c不会读取?,?就留在缓冲区,如果不把他吃掉后面都读不了。至于读回车,scanf输入整数时会自动跳过回车空格啥的,没影响。
长寿师兄 2年前 回复TA
为什么对留在缓冲区的\n没有任何反应?
Shineld 2年前 回复TA
@Akihi 用来读问号的吧。。。没那么复杂
Sapphire 2年前 回复TA
@Pinfaba #include<stdio.h> #include<stdlib.h> int main() {     int a,b;     char c;     char d[3];     int k;     int count=0;     while(~(k=scanf("%d%c%d=%s",&a,&c,&b,d)))     {         if((a>=0&&a<=100)&&(b>=0&&b<=100))         {             if((c==&#039;+&#039;)&&(a+b==atoi(d)))count++;             if((c==&#039;-&#039;)&&(a-b==atoi(d)))count++;         }     }     printf("%d",count);     return 0; }    这样改就对了,可以来看一下我的文章。
随心 2年前 回复TA
@Akihi @1595664282 好像不是你说的那样,不然的话为什么只有当k==3时才用getchar呢,应该就像上面那个朋友说的:因为需要四个参数, 你输入了三个, 还少一个, 用getchar()代替了第四个, 不然下道题输入的数是上道题的第四个参数。因为按照你的说法的话应该每一行都执行getchar。
Jack 3年前 回复TA
学到了以前没注意到得细节问题,开心。