2014-01-10 61 views
0

我正在寫一個程序,它從用戶讀取的輸入所選擇的代碼和取決於它計算(面積,周長,體積或退出)如何scanf的

#include<stdio.h> 

int main(void) 
{ 
    double radius=0.0; 
    double area=0.0; 
    double volume=0.0; 
    double height=0.0; 
    double circumference=0.0; 
    const double pi=13.459820934; 

    char choice; 

    do 
    { 
    printf("Choose what you want to do : \n" 
      "Calculate Area   A\n" 
      "Calculate Circumference C\n" 
      "Calculate Volume  V\n" 
      "Quit     Q\n"); 
    /*scanf("%c",&choice);*/ 
    choice=getchar(); 

    printf("please enter radius : "); 
    scanf("%lf",&radius); 

    if(choice=='V') 
    { 
     printf("please enter height : "); 
     scanf("%lf",&height); 
    } 

    area = pi * radius * radius; 
    volume = height * area; 
    circumference = 2 * pi * radius; 

    switch (choice) 
    { 
    case 'A': 
     printf("Area = %lf\n\n",area); 
     break; 
    case 'V': 
     printf("Volume = %lf\n\n",volume); 
     break; 
    case 'C': 
     printf("Circumference = %lf\n\n",circumference); 
     break; 
    default: 
     printf("Not a good answer !!\n\n"); 
    } 
    }while(choice!='Q'); 

return 0; 
} 

當前清洗緩衝我運行該程序對於第一個循環運行良好,但在第二次開始循環時再次選擇了選項後,它不會等待我輸入我的選擇,它會直接打印「請輸入半徑」

當我調試程序時,我發現第二次啓動循環時選擇了'\ n',我怎樣才能在每個循環中刪除這個'\ n'? 我知道這個'\ n'是由循環運行第一次讀取用戶選擇而產生的,但我不知道爲什麼選擇從選擇中刪除,而不是?

我已經試過顯示的選項給用戶,但同樣的問題之前初始化的選擇發生

任何幫助嗎?提前

+0

可能重複的[如何清除輸入緩衝區在C?](http://stackoverflow.com/questions/7898215/how-to-clear-input-buffer-in-c) –

回答

1

\n字符 感謝由scanf通話按輸入鍵後闊葉落後。您需要在下一次迭代之前使用此\n,否則此\n字符將在接下來的scanfgetchar中讀取。

使用片斷

int ch; 
while((ch = getchar()) != EOF || ch != '\n'); 

剛剛結束的括號的do-while}或第二scanf前後。

+0

你能告訴我什麼嗎?它呢? – Salahuddin

+0

@Salahuddin;更新了答案。 – haccks

+0

while(getchar()!='\ n'); 我使用了這個代碼片段,它的工作原理 因此,用戶輸入的任何輸入都跟着'\ n',所以輸入本身是從緩衝區中讀取並放入一個變量中(她是選擇),但剩下'\ n'因此我們必須假裝我們再次讀取輸入以讀取此'\ n'並清除緩衝區,這是(()getchar()!='\ n') 的功能。 如果我是對的,爲什麼'\ n'沒有用輸入本身讀取並放入變量?爲什麼它被拋在後面 – Salahuddin