2014-09-22 3 views
-3

Была новая проблема с функцией while. Как легко звучит, я все еще не могу обвести вокруг себя голову.Хотя функция не работает, как будто я хочу ее

Как и моя последняя программа, этот случай неожиданно закрывается после правильных и неправильных сообщений. Я хочу, чтобы это зациклилось после ввода числа, так что программа не остановится. Спасибо за помощь, если она есть.

#include <iostream> 
using namespace std; 

int main() 
{ 
    int X = 0; //setting the first variable 
    int num; //setting the second 

    while (X == 0) //this should happen whenever X is equal to 0 
    { 
      cout << "Type a number bigger than 3. "; //output 
      X++; //This should increase X, so that the next while function can happen 
    } 
    while (X == 1) //again, since I increased x by one, (0+1=1 obviously) this should happen 
    { 
      cin >> num; //standard input 
      if (num > 3) //if function: if num is bigger than three, then this should happen 
      { 
        cout << "Correct! Try again!" <<endl; //output 
        X--; //Here I'm decreasing x by one, since it was 1 before, now it becomes 0. This should make the "while (X == 0)" part happen again, so that another number bigger than three can be entered 
      } 
        if (num <= 3) //if function: if num is lesser than or equal to 3, this should happen 
      { 
        cout << "Wrong! Try again!" <<endl; //output 
        X--; //This is supposed to work like the "X--;" before, repeating the code from "while (X==0)" 
      } 
    } 
} 
+0

использовать замкнутый цикл? – Chantola

+2

Вы изменяете X независимо от ввода –

+0

и где возвращается 0 ;? – Chantola

ответ

5

теперь становится 0. Это должно сделать "в то время как (X == 0)" часть повторилось

Nope. Хотя петли не волшебным образом вступают в силу в любой момент во время выполнения программы. Вы только вводите цикл while, когда вы достигли его из приведенного выше кода. Обычно программы выполняются сверху вниз.

Вам нужна петля вокруг всей программы, если вы хотите продолжать ходить. Этим while s у вас теперь должно быть if s.

0

Вы хотите, чтобы обернуть весь код в его собственном while цикле:

while (true /* or something */) 
{ 
    while (X == 0) //this should happen whenever X is equal to 0 
    { 
    // ... 
} 
1

Объединить две линии while в одну, while(true).

Поместите каждое предыдущее while тело в состояние if с положением от старого while в нем.

while(true) { 
    if (X==0) { 
    // the X==0- case 
    } else if (X==1) { 
    // the X==1 case 
    } 
} 

для того, чтобы закончить свой цикл, сделать break;.

Вы должны думать о программах на С ++ как последовательность инструкций, например, рецепт. while просто означает цикл: вы проверяете условие. Если это правда, вы запускаете тело. После запуска тела вы проверяете только на то, что условие снова, и запустите тело, если оно истинно. Всякий раз, когда условие является ложным в начале или конце тела while ({}), вы завершаете цикл и переходите к следующему.

Первый цикл работает, заканчивается, затем второй цикл запускается в вашем коде. Как только первый цикл выйдет, вы не вернетесь в него только потому, что условие становится истинным.

Понимание управления потоком является одним из «жестких» шагов обучения программированию, поэтому это нормально, если вы считаете это сложным.

Есть много улучшений, которые вы можете сделать для своего кода, за исключением того, что он работает - на самом деле мало нужно для X. Но детские шаги! Как только вы его заработаете, вы можете подумать «как я могу удалить переменную X?».

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

0

По крайней мере, поставите свою вторую петлю внутри первой, чтобы она работала по назначению. В противном случае у вашей программы нет причин возвращаться.

Тем не менее, это нехороший дизайн.

Смежные вопросы