如何在C语言的早期结束循环?

时间:2009-10-02 01:03:20

标签: c loops

我有一个基本的C程序产生一个数字,用户必须猜测它(是的,你已经称它为:作业)。我能够得到相当多的所有这些,所以我有点自豪,但我接受我所做的任何错误,当然我还在学习。我的两个主要问题是

  1. 如果用户选择正确的号码,在达到尝试次数#10之前,我该如何提前结束此程序?和
  2. 大师可以看到任何明显错误,我没有使用我的代码?
  3. 我正尽力尽力编程:)

    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;
    }
    

6 个答案:

答案 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”语句,并检查用户是否实际上没有获胜。