2017-02-14 34 views
5

我是C編程新手,我用C做了一個簡單的計算器程序。
程序運行但是不工作,直到b的值輸入後才輸入字符輸入沒有問輸入爲。我不知道爲什麼會發生這種情況,但有沒有解決辦法?我的C程序中的字符輸入錯誤?

這裏是我的代碼:

#include <stdio.h> 
int main() 
{ 
    float a,b; 
    char op; 
    printf("enter a: "); 
    scanf("%f",&a); 
    printf("enter b: "); 
    scanf("%f",&b); 
    printf("enter operation: "); 
    scanf("%c",&op); 
    switch(op) 
    { 
     case '+': 
      printf("\n%.2f %c %.2f = %.2f",a,op,b,a+b); 
      break; 
     case '-': 
      printf("\n%.2f %c %.2f = %.2f",a,op,b,a-b); 
      break; 
     case '*': 
      printf("\n%.2f %c %.2f = %.2f",a,op,b,a*b); 
      break; 
     case '/': 
      printf("\n%.2f %c %.2f = %.2f",a,op,b,a/b); 
      break; 
     default: 
      printf("invallid input!!"); 
    } 
    return 0; 
} 

程序似乎是絕對正確的,但還是有那麼點意思,我失蹤。感謝您的答覆。

回答

3

只要把空間您的輸入操作的scanf()功能的字符格式說明之前,你的程序將正常工作:

scanf(" %c" , &op); 
2

當使用scanf(),它會留下一個\n字符輸入緩衝區。接下來的scanf()將保留這個換行符並存儲它。您需要以添加一個空格scanf()

scanf(" %c", &op); /* to skip any number of white space characters */ 

或者與getchar()消耗字符,而不是。 getchar()出錯返回intEOF功能可以這樣使用:

int op = getchar() 

存儲在op發現的字符。您也可以在scanf()調用後添加getchar(),這將消耗剩餘的\n字符。

注意:檢查scanf()的結果是一個好習慣。您應該改爲:

if (scanf(" %c", &op) != 1) { 
    /* oops, non character found. Handle error */