虽然功能并不像我想要的那样起作用

时间:2014-09-22 15:33:27

标签: c++ while-loop

有了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)"
          }
    }
}

4 个答案:

答案 0 :(得分:5)

  

现在它变为0.这应该使“while(X == 0)”部分再次发生

不。虽然循环在程序执行期间的任何时候都不会神奇地生效。您只能在从上面的代码到达时输入while循环。程序通常从上到下执行。

如果你想继续循环,你需要围绕整个程序循环。你现在拥有的那些while应该是if s。

答案 1 :(得分: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;

您必须将C ++程序视为一系列指令,如配方。 while只是意味着一个循环:你检查条件。如果是,你运行身体。运行正文后,再次检查条件,如果为true则运行正文。只要while{}后面的X封闭代码的主体的开头或结尾处的条件为假,就结束循环并继续下一个循环。

第一个循环运行,完成,然后第二个循环在代码中运行。一旦第一个循环退出,您就不会因为条件成立而返回到它。

了解流量控制是&#34; hard&#34;学习编程的步骤,所以如果你觉得这很棘手就可以了。

除了让代码工作之外,您可以对代码进行许多改进 - 实际上,根本不需要X。但宝贝步骤!一旦你开始工作,你就可以思考&#34;我怎样才能删除变量{{1}}?&#34;。

在对您的程序进行如此根本性的更改之前,您应该让它正常工作,并保存它的副本,以便您可以“返回”#34;到最后一个工作版本。

答案 2 :(得分:0)

您希望将所有代码包装在其自己的while循环中:

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

答案 3 :(得分:0)

至少将第二个while循环放在第一个循环中,以使其按预期工作。否则你的程序没有理由再回去。

然而,这不是一个好的设计。