2012-03-24 64 views
1

CODE:爲什麼這個C程序完全跳過我的輸入?

#include <stdio.h> 
main() { 

    int nums[100], i; 
    char answer; 
    int count = 0; 
    double avg; 

    for (i = 0; i < 100; i++) { 
     printf("Enter number %d: ", i + 1); 
     scanf("%d", &nums[i]); 
     printf("Another? "); 
     scanf("%c", &answer); 
     count += nums[i]; 
    } 
} 

RUN:

~> a.out 
Enter number 1: 1 
Another? Enter number 2: 2 
Another? Enter number 3: 3 
Another? Enter number 4: 4 
Another? Enter number 5: 5 
Another? Enter number 6: 6 
Another? Enter number 7: 7 
Another? Enter number 8: 8 
Another? Enter number 9: 

它應該問我,如果我想進入另一個號碼,但由於某些原因,scanf函數不能正常工作。另外,我需要讓用戶輸入100個號碼,或者根據提示輸入另一個號碼的問題。如果答案是否定的,則結束,如果是,則繼續。

+0

我注意到,即使一旦你讀一個字的東西整理出來你沒有在輸入的基礎上做出任何決定...... – dmckee 2012-03-24 21:22:12

+0

是的,我知道,我這麼做了,那不是我的問題。我發佈的以上是。 – eveo 2012-03-24 21:26:59

回答

6

您的第一個scanf在緩衝區中留下換行符。這是因爲%d忽略尾隨空白,而%c沒有。使用這個把戲,使第二scanf吃的空白:

scanf(" %c", &answer); 
    ^

的問題是很常見,你可以在C FAQ閱讀更多關於它。

+0

+10如果我可以!我有這個問題幾千次 – BlackBear 2012-03-24 21:20:20

+0

更好的解決方案是這樣的:scanf(「%c%* c」,&answer);星號告訴scanf解析第二個字符,但不要將它分配給任何東西。 – 2012-03-24 21:21:57

+0

非常感謝你cnicutar。謝謝你,凱莉格雷戈裏。 – eveo 2012-03-24 21:27:42

0

您需要在%c之前有一個空格,以便跳過scanf在數字結尾處停止時未讀取的換行符。

我有一些不請自來的建議......

  1. 不要使用scanf(3)直接,太難讓它做你想要什麼。通常使用fgets(3),然後使用sscanf(3)

  2. 編譯時會打開警告。 (我的Mac上,這意味着cc -Wall ...

而且有警告開啓,在這裏你的程序有一些修復的問題:

#include <stdio.h> 
int main(void) { 

    int nums[100], i; 
    char answer; 
    int count = 0; 
    // double avg; 

    for (i = 0; i < 100; i++) { 
     printf("Enter number %d: ", i + 1); 
     scanf(" %d", &nums[i]); 
     printf("Another? "); 
     scanf(" %c", &answer); 
     if (answer != 'y' && answer != 'Y') 
      break; 
     count += nums[i]; 
    } 
    return 0; 
} 
相關問題