gpt4 book ai didi

c - 为什么在这个 C 程序中 printf 输出加倍?

转载 作者:行者123 更新时间:2023-11-30 16:41:27 31 4
gpt4 key购买 nike

我刚刚学习 C,我制作了一个非常简单、hacky 的刽子手游戏。我不明白为什么每次我猜测时预期输出都会加倍。

#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 之后使用 _flushall() ,缓冲区期望获得一个字符字符,当您输入字符时,您输入字符并输入。

关于c - 为什么在这个 C 程序中 printf 输出加倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46260424/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com