2017-09-17 84 views
0

我剛剛學習C,我做了一個非常簡單,很好玩的hang子手遊戲。我無法弄清楚的是,爲什麼每次猜測時預期的輸出都會翻倍。爲什麼printf輸出在這個C程序中加倍了?

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    setbuf(stdout, NULL); 
    char word[] = "pretzels"; 
    char guessed[50]; 
    memset(guessed, '0', sizeof(guessed)); 
    int len; 
    char guess; 
    char buf; 
    len = strlen(word); 
    int j; 

    printf("Welcome to Hangman!\n"); 
    for (int i=0; i<len; i++) { 
    if (guessed[i] != '0') { 
     printf("%c ", word[i]); 
    } 
    else { 
     printf("_ "); 
    } 
    } 
    while(memcmp(word, guessed, len) != 0) { 
    printf("\nGuess a letter: "); 
    scanf("%c", &guess); 

    for (j=0; j<len; j++) { 
     if (word[j] == guess && word[j] != guessed [j]) { 
     guessed[j] = guess; 
     break; 
     } 
    } 
    for (int i=0; i<len; i++) { 
     if (guessed[i] != '0') { 
     printf("%c ", word[i]); 
     } 
     else { 
     printf("_ "); 
     } 
    } 
    } 
    printf("\nYou got it!"); 
    return 0; 
} 

這個程序,然後看起來像這樣的輸出...

Welcome to Hangman! 
_ _ _ _ _ _ _ _ 
Guess a letter: p 
p _ _ _ _ _ _ _ 
Guess a letter: p _ _ _ _ _ _ _ 
Guess a letter: r 
p r _ _ _ _ _ _ 
Guess a letter: p r _ _ _ _ _ _ 
Guess a letter: e 
p r e _ _ _ _ _ 
Guess a letter: p r e _ _ _ _ _ 

等等......每一次輸出再次啓動打印線scanf函數前右,跳過scanf函數和然後繼續執行再次繪製單詞/空格的for循環。

爲什麼我的輸出翻倍?我肯定錯過了什麼。

+0

想想你的類型和scanf讀取的內容。 – prl

+2

對於交互式輸入來說,Scanf是一個糟糕的選擇。這裏有很多關於如何使用的答案。 – prl

+0

@ArtemBarger在語言中有額外的功能是很好的。 – CroCo

回答

0

你可以在scanf後面使用_flushall(),緩衝區期望得到一個char字符,當你輸入一個字符時,你輸入字符並輸入。

+0

我的意思是這樣的,_flushall(); – piscoony

相關問題