【发布时间】:2014-11-04 19:10:11
【问题描述】:
我对 C/C++ 有点陌生,但我不明白以下代码中的问题所在。 在这个作业中,我只能使用 C 函数和语法,不允许使用 C++。
程序应该从字母表中随机选择一个字符,并让用户 3 次尝试猜测它。
#include <stdio.h>
#include <stdlib.h>
#define guesses 3
int main(){
setbuf(stdout, NULL);
/* A 2.P.b */
/* version with loop*/
int i = 0;
char randomChar = (65 + (rand()%26) + 1);
/* comment the line below, when the programm works as intended */
printf("\n%c\n", randomChar);
char guessedChar;
while((i<=guesses) && (guessedChar != randomChar)){
printf("Guess a letter.\n");
scanf("%c", &guessedChar);
if(guessedChar != randomChar){
int guessesLeft = guesses - i;
if (guessesLeft > 1){
printf("Wrong letter. You have %d more tries.\n", guessesLeft);
}
else{
printf("Wrong letter. Last try.");
}
}
else{
printf("Congratulations.\n");
}
i++;
}
return 1;
}
输出如下:
Q
Guess a letter.
A
Wrong letter. You have 3 more tries.
Guess a letter.
Wrong letter. You have 2 more tries.
Guess a letter.
B
Wrong letter. Last try.Guess a letter.
Wrong letter. Last try.
问题:
选择的字母不是随机的,而是 Q。
第一个猜测需要花费两条“生命”?!
【问题讨论】:
-
也许还有 GIYF 和 LMGTFY 以提供稍微不那么冒犯性的替代方案。
-
一个关于风格的小技巧,建议你使用预处理器定义的宏(如
guesses)你应该只使用大写字母,如GUESSES。它不是由语言或预处理器强制要求的,它只是几乎在任何地方和每个人都常用的。
标签: c