为什么0的选择在循环时结束?

时间:2014-09-06 17:02:03

标签: c++

使用此代码,我试图构建一个由用户输入的整数值的数组。变量“int selection”是一个int,所以如果输入的值是一个int,while循环应该继续,但值0似乎结束它,我无法弄清楚原因。谢谢你的帮助。

int main()
{
  //data to be entered
  int selection;

  //array size
  int const array_size = 100;

  //array
  int integers[array_size];

  //array index
  int index = 0;

  //prompt
  std::cout << "Enter integer ('x' to quit): " << std::endl;

  //get the data
  std::cin >> selection;

  //while data is int
  while (selection)
  {
    //put it in the array
    integers[index] = selection;

    //increment index
    index += 1;

    //get new data point
    std::cin >> selection;

  }

  return 0;

}

5 个答案:

答案 0 :(得分:2)

此代码不会执行评论所说的内容:

//while data is int
while (selection)

数据始终为int,无法在int变量中存储任何其他内容。

代码实际上做的是在值为非零时循环。

答案 1 :(得分:1)

因为布尔上下文中的0被解释为false

答案 2 :(得分:0)

false在C ++中被解释为0。同样,0被解释为false。 因此,当selection0时,循环有效地变为:

while ( false )
{
...
}

没有运行。

另一方面,当selection不是0时,C ++将其视为true并且循环将运行。

编辑: 如果要在输入为整数时循环,请尝试

while (std::cin >> selection)
{
...
}

答案 3 :(得分:0)

这就是代码现在如何运作的方式。谢谢你们所有的帮助

int main()
{
  //data to be entered
  int selection;

  //array size
  int const array_size = 100;

  //array
  int integers[array_size];

  //array index
  int index = 0;

  //prompt
  std::cout << "Enter integer ('x' to quit): " << std::endl;

  //while data is int
  while (std::cin >> selection)
  {
    //put it in the array
    integers[index] = selection;

    //increment index
    index += 1;

  }

  return 0;

}

答案 4 :(得分:0)

while (selection)不再是selection时,

int不会停止; selection 总是 int

while (selection)不等于selection时,

0会停止。

您应该测试>>操作的结果。