1. 程式人生 > >C語言中字符輸入問題

C語言中字符輸入問題

nbsp clas 輸入緩沖 show bsp 解決 har 問題 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>

這樣說就明白了,這道題最標準的答案就應該是這樣了。

C語言中字符輸入問題