尝试用代码块c语言编写一个程序:
1到100
的随机密码,并要求用户猜测该数字我当前的程序在猜测是热还是冷方面给出了错误的输出,也不确定我应该将放在哪里(
vs{
如果有的话,或者在哪里使用
“else if”。如果不是太多,请解释变化。
#include <stdio.h>
#include <stdlib.h>
#define MAX_VAL 100
int main(void)
{
int next_guess, first_guess, secret, distance;
srand(time(0));
secret = 1 + rand()%MAX_VAL;
distance = (secret - first_guess);
while (first_guess != secret) {
printf(" enter your guess from (1 to %d)?\n", MAX_VAL);
scanf("%d", &first_guess);
{
if (first_guess == secret)
printf("You guessed correctly!\n");
if (first_guess != secret)
printf("Your guess was hot enter your next guess from (1 to %d)?\n", MAX_VAL);
scanf("%d", &next_guess);
if (next_guess == secret)
printf("You guessed correctly!\n");
if ((next_guess-secret) < distance)
printf("Your guess was hot,");
if ((next_guess-secret) >= distance)
printf("Your guess was cold,");
}
}
return 0;
}
我不知道为什么这个游戏需要两次猜测。这是我的版本:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_VAL 100
int main(void)
{
int guess, secret, distance;
srand(time(0));
secret = 1 + rand()%MAX_VAL;
while (true)
{
printf(" enter your guess from (1 to %d)?\n", MAX_VAL);
scanf("%d", &guess);
if (guess == secret)
{
printf("You guessed correctly!\n");
break;
}
else
{
distance = guess-secret;
if (distance>0)
printf("Your guess was hot,");
else
printf("Your guess was cold,");
}
}
return 0;
}
这是代码,你需要知道一些事情:首先你需要比较数字之间距离的绝对值,因为当你减去得到距离时,你可能会得到一个负数。
而(first_guess!=秘密)
其次,您不应该比较尚未阅读的值。
没有必要把 {}
放在 IF
s 之外,你需要在 if
句子之后使用它。还要尝试稍微改善一下缩进。
最后,最重要的建议,回答你的问题是,如果你有一个if
,检查一些条件,你不需要放另一个如果
检查opossite条件,如果只有两个条件是可能的,只需使用另
一个,如果需要,使用另一个如果第
一个里面
。
例:
错误的方式:
if (first_guess == secret)
printf("You guessed correctly!\n");
if (first_guess != secret) {
printf("Your guess was hot enter your next guess from (1 to %d)?\n", MAX_VAL);
scanf("%d", &next_guess);
}
right way:
if (first_guess == secret)
printf("You guessed correctly!\n");
else {
printf("Your guess was hot enter your next guess from (1 to %d)?\n", MAX_VAL);
scanf("%d", &next_guess);
}
解决方案将是:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_VAL 100
#define ABSOLUTE(a) (((a)>0)?(a):(-a))
int main() {
srand(time(0));
int secret,new,newdistance,olddistance,ok;
secret = 1 + rand()%MAX_VAL;
printf ("secret is %d",secret);
char clean;
do {
printf(" enter your guess from (1 to %d)?\n", MAX_VAL);
ok=scanf ("%d",&new);
while ((clean=getchar())!='\n');
} while(ok!=1);
newdistance = (secret - new);
do {
if (new == secret)
printf("You guessed correctly!\n");
else {
do {
printf("enter your guess from (1 to %d)?\n", MAX_VAL);
ok=scanf ("%d",&new);
while ((clean=getchar())!='\n');
} while(ok!=1);
if (new == secret)
printf("You guessed correctly!\n");
else {
olddistance=newdistance;
newdistance=secret-new;
if (ABSOLUTE(newdistance) < ABSOLUTE(olddistance))
printf("Your guess was hot,");
else
printf("Your guess was cold,");
}
}
} while (new!= secret);
return (0);
}
我在 ((干净 = getchar())!='\n') 时
添加了该行,以确保正确读取来自用户的每个输入。
如果宏给您带来问题,这里有一个使用函数而不是宏来计算绝对值的实现:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_VAL 100
int absolute (int a) {
return (a>0?a:-a);
}
int main() {
srand(time(0));
int secret,new,newdistance,olddistance,ok,flagfirstguess;
flagfirstguess=1;
secret = 1 + rand()%MAX_VAL;
printf ("secret is %d",secret);
char clean;
do {
printf(" enter your guess from (1 to %d)?\n", MAX_VAL);
ok=scanf ("%d",&new);
while ((clean=getchar())!='\n');
} while(ok!=1);
newdistance = (secret - new);
do {
if (new == secret)
printf("You guessed correctly!\n");
else {
if (flagfirstguess==1) {
printf("Your guess was hot enter your next guess from (1 to %d)?\n", MAX_VAL);
flagfirstguess=0;
}
else {
do {
printf("enter your guess from (1 to %d)?\n", MAX_VAL);
ok=scanf ("%d",&new);
while ((clean=getchar())!='\n');
} while(ok!=1);
if (new == secret)
printf("You guessed correctly!\n");
else {
olddistance=newdistance;
newdistance=secret-new;
if (absolute(newdistance) < absolute(olddistance))
printf("Your guess was hot,");
else
printf("Your guess was cold,");
}
}
}
} while (new!= secret);
return (0);
}
您的代码
if (first_guess != secret)
printf("Your guess was hot enter your next guess from (1 to %d)?\n",
MAX_VAL);
scanf("%d", &next_guess);
不做您认为它会做的事情,if语句只会影响printf语句,而不会影响scanf语句。您应该用大括号将语句括起来
if (first_guess != secret)
{
printf("Your guess was hot enter your next guess from (1 to %d)?\n",
MAX_VAL);
scanf("%d", &next_guess);
}
我不喜欢使用scanf()进行键盘输入,所以我会使用fgets()来指定最大缓冲区大小,然后将该值转换为整数,或者使用sscanf()进行转换
char buffer[32];
fgets( buffer, sizeof(buffer), stdin );
next_guess = atoi( buffer );
or
char buffer[32];
fgets( buffer, sizeof(buffer), stdin );
sscanf( buffer, "%d", &next_guess );
您应该始终初始化C中的所有变量
int next_guess = 0, first_guess = 0, secret, distance = 0;
我的程序应该要求用户猜测 0 到 100 之间的数字,但我似乎无法正确输出。目前,如果用户数大于随机数,它会打印出无限数量的“您的数字太高”。此外,如果第一个 UserGuess 很低,那么以下所有数字都将具有相同的提示:(“您的数字太低”),尽管它们实际上大于随机数。我不知道我做错了什么。任何帮助将不胜感激。谢谢!
在这个程序中,计算机生成一个随机数(在1-100之间),用户试图猜测它。一直运行到用户正确猜出数字为止。需要打印出在正确猜测数字之前所花费的尝试总数。程序运行正常,但存在逻辑错误。当我正确猜测数字时,什么都没有打印出来;程序只是停止。
我在做一个数字猜谜游戏: 计算机在间隔内生成一个数字 我试着猜测它,并收到一个回复,不管它是高于/低于我的猜测,还是等于我的猜测,我赢了 有一个可以猜测的间隔,还有一个猜测尝试限制
我正在构建一个猜数字游戏,从控制台读取一个4位数的数字。计算机随机生成4位数,用户尝试猜测数字及其正确顺序。程序以0A0B1A3B或4A0B等格式返回答案,如果你猜的数字正确,它的位置也正确,它将返回A,如果你猜的数字正确,但它的位置错误,它将返回B。 > 如何确保计算机生成的数字是4个不同的随机数?这是可能的吗。试图控制随机数的结果是否会破坏随机数的全部目的 如何确保用户输入四个不同的数字。即,
好吧,我知道这个以前有人问过,但我就是想不出哪里出了问题。以下是我的说明: “编写一个程序,生成1到1000之间的随机数。然后让用户猜猜数字是多少。如果用户的猜测值高于随机数,程序应该显示“太高,再试一次”。如果用户的猜测值低于随机数,程序应该显示“太低,再试一次”。程序应该使用一个循环,直到用户正确猜测出随机数。 还有,保持用户猜测次数的计数。当用户正确猜测随机数时,程序应该显示猜测的次数。输入