mirage


私信TA

用户名:mirage915

访问量:12284

签 名:

蒟蒻也想变强啊..

等  级
排  名 2336
经  验 2351
参赛次数 2
文章发表 9
年  龄 0
在职情况 在职
学  校
专  业

  自我简介:

解题思路:



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


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


 

0.0分

124 人评分

  评论区

试了一下,感觉这个程序还是很优秀,虽然在第二个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等乱七八糟的情况。
2020-04-26 15:08:05
这个答案错了,可以试试1+1=0
2020-02-08 03:39:00
不是很明白getchar的作用,如果是读取回车为什么是k==3而不是k==4呢
2020-01-12 11:39:44
厉害
2019-11-19 03:51:18
第二个else if会导致一个BUG,比如5+1=4在这个代码中判断就是对的
2019-10-31 21:35:30
while(~(k=scanf("%d%c%d=%d",&a,&op,&b,&c)))


大佬,这句是干什么用的吖
2019-10-04 20:26:16
这个确实,把scanf用透了
2019-09-15 22:39:45
while(~(
这里的~是要取反吗?
2019-07-25 15:30:45