【发布时间】:2014-10-01 17:28:26
【问题描述】:
我刚开始学习 C 编程,为了练习,我找到了这个任务。这是一个数字猜谜游戏,计算机会猜出我心中的数字。首先,我必须想出一个数字。然后我必须在数字所在的范围内进行扫描。然后计算机在该范围内生成一个数字并问我它是否正确。根据计算机的回答,如果太低,我必须回复 L,如果太高,我必须回复 H,如果正确,我必须回复 G。如果它是正确的,它会打印出来以及尝试的次数。如果输入了任何其他字符,则会打印出我输入了错误的答案。
这是我到目前为止所得到的。它没有给我任何错误,但是当我输入 L、H 或 G 时,它会打印出我输入了错误的答案。
提前感谢您的帮助。
#include<stdio.h>
#include<stdlib.h>
void main(){
int randomNo = 0;
int input = 0;
int counter = 0;
int min = 0;
int max = 0;
char answer = ' ';
char low = 'L';
char high = 'H';
char good = 'G';
printf("Enter min and max: ");
scanf_s("%d %d", &min, &max);
do{
randomNo = min + rand() % (max - min) + 1;
printf("Is it %d?\n", randomNo);
printf("Enter your answer:");
scanf_s("%s", &answer);
if (answer == low){
printf("Number guessed is low\n");
min = randomNo;
counter++;
}
else if (answer == high){
printf("Number guessed is high\n");
max = randomNo;
counter++;
}
else{
printf("You entered the wrong answer!\nYour answer should be L - too low H - too high G - goed\n");
}
} while (answer != good);
printf("Your answer is correct!\nYou guessed it in %d times!\n", counter);
}
【问题讨论】:
-
你的
if语句也需要处理answer == good,否则当你输入G时会打印wrong answer。您可以简单地将最后一个else更改为else if (answer != good)。 -
void main()应该是int main(void)。 -
你使用
scanf_s而不是scanf(或fgets/getchar等)的原因是什么?它的便携性较差,并且没有任何优势。如果您必须使用它(因为这是您必须或类似的任务):您使用哪个版本——Microsoft 的 CRT 版本还是 C11 附件 K 中的标准化版本? -
我在 Visual Studio 2013 中编写代码,它不允许使用 scanf,因为它不安全。但我会尝试 fgets 和 getchar。
标签: c