Как закончить цикл рано в C?

static переменные (в функции) как ограниченные по объему глобальные переменные. В целом их нужно избежать (как глобальные переменные, они вызывают проблемы повторной входимости), но время от времени полезны (некоторые стандартные библиотечные функции используют их). Можно возвратить указатели на глобальные переменные, таким образом, можно возвратить указатели на static переменные также.

9
задан Bill the Lizard 19 September 2012 в 22:08
поделиться

6 ответов

Вам нужна команда break .

for (int i = 0; i < 10; i++) {
    if(i == 5)
       break;
}

Этот ресурс выглядит очень полезным для вас.

В качестве примечания: ваш текст «Вы проиграли» всегда будет отображаться, несмотря ни на что. Вы можете оценить это внутри цикла do {}.


Всегда на шаг впереди меня с сообщениями / правками в этом ответе, Эндрю Хэйр!

9
ответ дан 4 December 2019 в 06:09
поделиться

Используйте оператор 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;
}
16
ответ дан 4 December 2019 в 06:09
поделиться

Почему бы не установить условие while на предположение пользователя? Что-то вроде:

 ...}while(i < x || guess !== target);
9
ответ дан 4 December 2019 в 06:09
поделиться

Я не вижу никаких «очевидных ошибок», которые не упоминались бы в предыдущих плакатах, кроме того факта, что после разрыва вам больше не нужны и «i», и «numGuess» "поскольку они всегда будут иметь одинаковую ценность. Просто используйте numGuess вместо «i» в условии while.

Но я бы очень рекомендовал вам сделать ваш код более читабельным - лучшее время для того, чтобы привыкнуть к хорошему стилю кодирования, сейчас, прежде чем вы приобретете и укрепить дурные привычки.

  • Всегда используйте самоописательные идентификаторы (имена переменных / функций). Например, ваш «x» действительно должен называться «maxGuesses».

  • Не экономьте на пустом пространстве. Например, "} while (i

  • Кажется, вы уже привыкли не экономить на комментариях - хорошо !!!

    Просто помните, что комментарии всегда должны описывать цель того, что делает код, а не механику того, как он это делает, если только механика настолько хитрая и хитрая, что требует объяснения.

Это важно по двум причинам:

  • 80-90% времени / усилий разработки обычно тратятся на поддержание существующего кода, вашего собственного или чужого. Эта задача ОЧЕНЬ проще с хорошо документированным и легко читаемым кодом. (вы не представляете, сколько повреждений мозга может получить кто-то, прочитав незнакомый код в 2 часа ночи во время производственной проблемы, только потому, что придурок, который это написал, не делал отступов в коде последовательно).

  • Наличие хорошо документированного и читаемого кода облегчает задачу. ты написать это, поскольку он проясняет ваши собственные мысли и препятствует глупым ошибкам, связанным с опечаткой ("ну, я хотел использовать x вместо y").

1
ответ дан 4 December 2019 в 06:09
поделиться

Вот три возможности. Читайте о них !!! (goto считается вредным)

 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;
 }
9
ответ дан 4 December 2019 в 06:09
поделиться

В случае вашей программы лучший способ добиться этого - это, вероятно, вызвать

void exit (int status);

(включая stdlib.h)

после вывода «You Win»

В общем, вы можете использовать ключевое слово «break» для выхода из цикла в любое время. В вашем случае это не приведет к желаемому эффекту, так как будет напечатано «вы проиграли ....». Если вы хотите использовать «break», вам нужно будет поставить выражение «if» вокруг «вы проиграете ...»

0
ответ дан 4 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: