C语言中字符输入问题

先上例题,一道太水太水的题,

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==0)
            printf("%d\n",a/b);
        else
            printf("%.2f\n",a*1.0/b);
    }
     } 
     return 0;
}

本来感觉太简单了,但是提交就是不对,然后看大佬博客,然而网上的很多也不对,网上很多都是用%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>  

这样说就明白了,这道题最标准的答案就应该是这样了。

猜你喜欢

转载自www.cnblogs.com/ls-pankong/p/9839412.html