我有一个基本的C程序产生一个数字,用户必须猜测它(是的,你已经称它为:作业)。我能够得到相当多的所有这些,所以我有点自豪,但我接受我所做的任何错误,当然我还在学习。我的两个主要问题是
我正尽力尽力编程:)
int main(void)
{
int x = 10;
int i = 0;
int target, guess;
int numGuess = 0;
/*create a random number*/
//create random function
srand(time(NULL));//this creates new number based on time which changes every second :)
target = rand() % 99; //create a random number using the rand() function, from 0 -99
do{
//increase the loop until it meets the x variable
i++;
numGuess++;
//allow user to input a number for guess
scanf("%d", &guess);
if (guess == target)
{
printf("You win! \n\n");
}
else if (guess > target)
{
printf("You are too high. Guess a number:\n\n");
}
else if (guess < target)
{
printf("You are too low. Guess a number:\n\n");
}
}while(i < x);
printf("You lose, the number was %d. \n", target);
printf("Number of tries %d\n", numGuess);
printf("Enter any key to exit...");
getchar();
getchar();
return 0;
}
答案 0 :(得分:16)
使用break
语句跳出循环:在这种情况下,虽然这可能不是你想要的,但是一旦你突破循环,你将立即看到“你输了”的消息。您可能需要重新构建程序以解决此问题。
尝试这样的事情:
int main(void)
{
int x = 10;
int i = 0;
int target, guess;
int numGuess = 0;
/*create a random number*/
//create random function
srand(time(NULL));//this creates new number based on time which changes every second :)
target = rand() % 99; //create a random number using the rand() function, from 0 -99
do {
//increase the loop until it meets the x variable
i++;
numGuess++;
//allow user to input a number for guess
scanf("%d", &guess);
if (guess == target)
{
printf("You win! \n\n");
break;
}
else if (guess > target)
{
printf("You are too high. Guess a number:\n\n");
}
else if (guess < target)
{
printf("You are too low. Guess a number:\n\n");
}
}while(i < x);
if (guess != target) {
printf("You lose, the number was %d. \n", target);
}
printf("Number of tries %d\n", numGuess);
printf("Enter any key to exit...");
getchar();
getchar();
return 0;
}
答案 1 :(得分:9)
您正在寻找break
命令。
for (int i = 0; i < 10; i++) {
if(i == 5)
break;
}
This resource看起来对你很有帮助。
作为旁注:无论如何,您的“遗失”文本将始终显示。您可能想要在do {}循环内进行评估。
在这个答案Andrew Hare的帖子/编辑上,我总是领先一步!
答案 2 :(得分:9)
为什么不将while条件设置为用户的猜测?类似的东西:
...}while(i < x || guess !== target);
答案 3 :(得分:9)
这有三种可能性。了解他们! (转到认为有害)
if (guess == target)
{
printf("You win! \n\n");
break;
}
if (guess == target)
{
printf("You win! \n\n");
goto end;
}
if (guess == target)
{
printf("You win! \n\n");
i=n;
}
答案 4 :(得分:1)
我没有看到之前海报没有提及的任何“明显的错误”,除了这个事实,在休息时,你不再需要“i”和“numGuess”,因为它们总是具有相同的值。只需在while的条件下使用numGuess而不是“i”。
但是我强烈建议你让你的代码更具可读性 - 现在,在你获得并巩固坏习惯之前,养成良好编码风格习惯的最佳时机。
始终使用自描述标识符(变量/函数名称)。例如。你的“x”应该被称为“maxGuesses”。
不要在白色空间上吝啬。例如。 “} while(i&lt; x);”应该是“} while(i&lt; x);”
你似乎已经养成了不吝啬评论的习惯 - 好!!!!
请记住,评论应该始终描述代码所做的目的,而不是它如何做到的机制,除非机制是如此棘手和聪明,它还需要解释。
这很重要的原因有两个:
80-90%的开发时间/工作通常用于维护现有代码,您自己或其他人的代码。通过记录良好且易于阅读的代码,该任务变得更加容易。 (你不知道有人因为在制作过程中凌晨2点阅读不熟悉的代码而导致的脑损伤是多少,因为编写它的bozo并没有一致地缩进代码。)
具有良好的文档和可读代码使您更容易编写它,因为它澄清了您自己的想法,并阻止了愚蠢的错误产生的错误(“oups,我的意思是使用x而不是y”)。 / p>
答案 5 :(得分:0)
对于你的程序,最好的方法是调用
void exit(int status);
(包括stdlib.h)
打印“You Win”后
通常,您可以使用关键字“break”随时退出循环。这对你的情况没有预期的效果,因为它会继续打印“你输了......”。如果你想使用“break”,你必须在“you lose ...”位置附加一个“if”语句,并检查用户是否实际上没有获胜。