先上例题,一道太水太水的题,
http://acm.hdu.edu.cn/showproblem.php?pid=1170
让做一个简单的计算器。然而入坑了。
#include<stdio.h> int main(){ int T,a,b; char c; scanf("%d",&T); while(T--){ getchar(); scanf("%c %d %d",&c,&a,&b); if(c=='+') printf("%d ",a+b); else if(c=='-') printf("%d ",a-b); else if(c=='*') printf("%d ",a*b); else{ if(a%b==0) printf("%d ",a/b); else printf("%.2f ",a*1.0/b); } } return 0; }
本来感觉太简单了,但是提交就是不对,然后看大佬博客,然而网上的很多也不对,网上很多都是用%s输入字符,我迷茫了,忘了%s和%c应该用哪个,可是明明是字符啊,为啥用%s,坚持提交,然而一直错误,然后突然想到getchar()可以作为一个中断缓冲区,也就是让缓冲区做好准备,详细getchar(),下边讲下getchar();.
1,从缓冲区读走一个字符,相当于清除缓冲区 ;
2,前面的scanf()在读取输入时会在缓冲区中留下一个字符'
'(输入完s[i]的值后按回车键所致),所以如果不在此加一个
getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误
3. getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)
getchar()使用不方便,解决方法:
(1)使用下面的语句清除回车:
while(getchar()!='
');
(2)用getche()或getch()代替getchar(),其作用是从键盘读入一个字符(不用按回车),注意要包含头文件<conio.h>
这样说就明白了,这道题最标准的答案就应该是这样了。