Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C数字猜谜游戏_C - Fatal编程技术网

C数字猜谜游戏

C数字猜谜游戏,c,C,我刚开始学习C编程,为了锻炼我找到了这个任务。这是一个数字猜游戏,电脑猜出我心中的数字。首先我得想一个数字。然后我必须扫描数字所在的范围。然后计算机生成一个在这个范围内的数字,并问我它是否正确。根据计算机的回答,如果太低,我必须用L回答,如果太高,我必须用H回答,如果正确,我必须用G回答。如果它是正确的,它会打印出来,以及尝试的次数。如果输入了任何其他字符,它会打印出我输入了错误的答案 这就是我到目前为止得到的。它不会给我任何错误,但当我输入L、H或G时,它会打印出我输入了错误的答案 提前感谢你

我刚开始学习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);

}
#包括
#包括
void main(){
int randomNo=0;
int输入=0;
int计数器=0;
int min=0;
int max=0;
char-answer='';
char low='L';
字符高='H';
char good='G';
printf(“输入最小值和最大值:”);
扫描频率(“%d%d”、“最小值”、“最大值”);
做{
randomNo=min+rand()%(max-min)+1;
printf(“是%d吗?\n”,否);
printf(“输入您的答案:”);
scanf_s(“%s”和“应答”);
如果(答案==低){
printf(“猜测的数字低\n”);
最小值=零;
计数器++;
}
否则如果(答案==高){
printf(“猜测的数字高\n”);
max=no;
计数器++;
}
否则{
printf(“您输入了错误的答案!\n您的答案应该是L-太低H-太高G-goed\n”);
}
}而(答案!=好);
printf(“你的答案是正确的!\n你猜了%d次!\n”,计数器);
}
应该是:

scanf_s("%c", &answer); /* answer is a char (not a string) */
另一方面:

使用相同种子的两个不同初始化将生成 在对兰德公司的后续调用中也会出现相同的连续结果

如果seed设置为1,则生成器将重新初始化为其初始值 值,并生成与调用rand或rand之前相同的值 斯兰德

为了生成类随机数,srand通常被初始化 对于某些独特的运行时值,如函数返回的值 时间(在标题中声明)。这对大多数人来说已经足够独特了 琐碎的随机化需要


添加
srand(时间(空))从一开始。

您的
扫描是“扫描”字符串(
%s
),而不是
字符(
%c

使用
scanf_s(“%c”,&answer)
!:)

而不是

scanf_s("%s", &answer);
使用:

As
answer
不是字符串,而是字符

您还需要将
else
更改为
else if(answer!=“G”)
else if(answer!=good)
rand
也将生成相同的值。为了生成随机值,您需要

srand(time(NULL));

main
的开头。这是您的
如果
语句也需要处理
answer==good
,否则您将在输入
G
时打印
错误的答案。如果(回答!=好)
void main()
应该是
int main(void)
,您可以简单地将最后一个
else
更改为
else。您使用
scanf\u s
而不是
scanf
(或
fgets
/
getchar
等)的原因是什么?它的便携性差,没有任何优势。如果你必须使用它(因为这是一个你必须使用的任务或类似的任务):你使用哪个版本——微软的CRT版本还是C11附件K中的标准版本?我正在Visual Studio 2013中编写代码,它不允许使用scanf,因为它不安全。但是我会尝试fgets和getchar。为什么
scanf_s
而不是
scanf
?@chouaib,有安全增强功能。他使用scanf_s,他可能有他的原因(可能是他正在学习的教程,或者他可能更喜欢一直使用scanf_)。我不会要求他改变这一点:O@AlterMann:
scanf_s
并不比
scanf
更安全(如果使用错误,两者都是危险的,如果使用正确,两者都是安全的),这里给出的所有答案都很好地说明了原因(在所有情况下都是UB)@Sorikairo:OP可能是在使用MSVC,并被一些针对标准C函数的警告误导,这些警告旨在鼓励人们编写可移植性较差的代码。
scanf_s(" %c", &answer);
srand(time(NULL));