Loops 我的代码错了吗?
我对编码非常陌生,我正在自学C语言 我正在做我的第一个练习,我要创造一个“游戏”(“或多或少”),其概念是: -计算机选择一个介于和1到100之间的随机数 -我们得猜猜 -当你找到神秘数字时,游戏结束 我设置了函数循环(do..while)和函数(if..else),即使你没有找到神秘数字(除非你找到!) 有几天我一直在处理我的代码,因为当我调试时,什么都没有发生(所以这是一个非常好的消息)但是当我运行时也什么都没有发生 我的代码是:Loops 我的代码错了吗?,loops,structure,conditional-statements,Loops,Structure,Conditional Statements,我对编码非常陌生,我正在自学C语言 我正在做我的第一个练习,我要创造一个“游戏”(“或多或少”),其概念是: -计算机选择一个介于和1到100之间的随机数 -我们得猜猜 -当你找到神秘数字时,游戏结束 我设置了函数循环(do..while)和函数(if..else),即使你没有找到神秘数字(除非你找到!) 有几天我一直在处理我的代码,因为当我调试时,什么都没有发生(所以这是一个非常好的消息)但是当我运行时也什么都没有发生 我的代码是: int main( int argc, char*argv[
int main( int argc, char*argv[])
{
int numberYouChoose = 0;
int MysteryNumber = 0;
const int MAX = 100, MIN = 1;
printf("What's the number?\n");
scanf("%d", &numberYouChoose);
srand(time(NULL));
MysteryNumber = (rand() % (MAX - MIN + 1)) + MIN;
do{
printf("Boooooh Try again!");
}while(numberYouChoose != MysteryNumber);
if (numberYouChoose == MysteryNumber);
printf("Yay you found it!\n");
return 0;
}
像电脑一样思考,一步一步走。。。你要求一个号码,但你再也不要求它,所以它将永远卡在你的do中。每次用户失败时,您都需要询问。将您的
Do while
更改为简单的while
while (numberYouChoose != MysteryNumber) {
printf("Boooooh Try again!\n");
printf("What's the number?\n");
scanf_s("%d", &numberYouChoose);
}
printf("Yay you found it!\n");
编辑:
这是多余的,当用户键入正确的号码时,您将退出
这就是全部代码:
int main(int argc, char*argv[])
{
int numberYouChoose = 0;
int MysteryNumber = 0;
const int MAX = 100, MIN = 1;
printf("What's the number?\n");
scanf("%d", &numberYouChoose);
srand(time(NULL));
MysteryNumber = (rand() % (MAX - MIN + 1)) + MIN;
while (numberYouChoose != MysteryNumber)
{
printf("Boooooh Try again!\n");
printf("What's the number?\n");
scanf_s("%d", &numberYouChoose);
}
printf("Yay you found it!\n");
return 0;
}
您的代码存在一些问题:
胡安在早些时候的回答中指出,控制结构是错误的。简单地将do-while更改为a-while-do会让您的代码在用户有机会猜测之前报告“Boooh…”(除非您重复询问数字,这不是一个好主意)
在代码行if(numberYouChoose==MysteryNumber);
中,尾随的;
是一个空语句,因此将始终执行下面的printf
行
以下工作:
int main( int argc, char*argv[])
{
int numberYouChoose = 0;
int MysteryNumber = 0;
const int MAX = 100, MIN = 1;
srand(time(NULL));
MysteryNumber = (rand() % (MAX - MIN + 1)) + MIN;
while ( 1 )
{
printf("What's the number?\n");
scanf("%d", &numberYouChoose);
if (numberYouChoose == MysteryNumber)
{
printf("Yay you found it!\n");
break;
}
printf("Boooooh Try again!");
}
return 0;
}
(1)
的计算结果始终为true,因此,理论上这将永远循环。但是,如果您猜对了,代码会报告这一点,然后中断
会导致while循环终止,代码会在while循环后继续。嗨@Juan carlos rodriguez,谢谢您的回答!感谢您的建议和支持,我尝试更改代码我现在知道了:code
(…)srand(time(NULL));MysteryNumber=(rand()%(MAX-MIN+1))+MIN;printf(“数字是什么?\n”);scanf(“%d”,&numberYouChoose);while(numberYouChoose!=MysteryNumber){printf(“booooh重试!\n”);printf(“数字是什么?\n”);scanf(“%d”,&numberYouChoose);}如果(numberYouChoose==MysteryNumber){printf(“耶,你去吧!”);}返回0;}@Ringii不客气,如果这有助于你别忘了将其标记为答案并投票:)@Ringii看看我上次的编辑。我给了你一些解释:D不需要检查数字是否正确。如果你在离开时离开了,
,那是因为你猜到了这个数字,我非常感谢你!!你的解释对我来说真的很珍贵!!我现在就试试这段代码:)你好,尼克,谢谢你的解释,这段代码非常清晰,帮助我理解了很多东西,这在我第一次写这段代码时绝对是个大问号。我真的很感激,我要试试这个:)我发现这行printf(“线索:%d\n”,MysteryNumber)很有帮助代码>就在while循环之前。它加快了测试速度;)@尼克,你可能比我更有经验,但据我所知,使用break
并没有遵循好的做法,对吗?我的意思是,在每次迭代中进行评估不是更好吗?@JuanCarlosRodriguez,是的,使用break
有缺点。我之所以选择在这里,是因为C语言中缺少“repeat while do”控制结构,这意味着我们将被迫复制用户输入(正如您所做的)或成功测试。看见
int main( int argc, char*argv[])
{
int numberYouChoose = 0;
int MysteryNumber = 0;
const int MAX = 100, MIN = 1;
srand(time(NULL));
MysteryNumber = (rand() % (MAX - MIN + 1)) + MIN;
while ( 1 )
{
printf("What's the number?\n");
scanf("%d", &numberYouChoose);
if (numberYouChoose == MysteryNumber)
{
printf("Yay you found it!\n");
break;
}
printf("Boooooh Try again!");
}
return 0;
}