我刚刚开始学习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);
}
答案 0 :(得分:1)
scanf_s("%s", &answer);
应该是:
scanf_s("%c", &answer); /* answer is a char (not a string) */
另一方面:
使用相同种子的两个不同初始化将生成 随后对兰德的调用也会产生相同的结果。
如果seed设置为1,则将生成器重新初始化为其初始值 value并产生与调用rand或之前相同的值 函数srand。
为了生成类似随机数的数字,srand通常被初始化 一些独特的运行时值,如函数返回的值 时间(在标题中声明)。这对大多数人来说足够独特 琐碎的随机化需求。
在开头添加srand(time(NULL));
。
答案 1 :(得分:0)
您的scanf_s
是&#34;扫描&#34;对于字符串(%s
),而不是char
(%c
)。
使用scanf_s("%c", &answer)
! :)
答案 2 :(得分:0)
而不是
scanf_s("%s", &answer);
使用:
scanf_s(" %c", &answer);
由于answer
不是字符串,而是字符。
您还需要将else
更改为else if(answer != 'G')
或else if(answer != good)
。 rand
也会生成相同的值。为了生成随机值,您需要
srand(time(NULL));
main
的开头。这是pseudo-random number
generator