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