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循環。
爲什麼我的輸出翻倍?我肯定錯過了什麼。
想想你的類型和scanf讀取的內容。 – prl
對於交互式輸入來說,Scanf是一個糟糕的選擇。這裏有很多關於如何使用的答案。 – prl
@ArtemBarger在語言中有額外的功能是很好的。 – CroCo