在数组中输入而不添加增量运算符++

时间:2015-02-04 10:44:07

标签: c++ arrays

我想对某些事情做一些确认(或反驳)。

我只是忙着将一个简单的练习放在循环条件中。基本上我创建了一个包含5个元素的数组,然后让用户输入5个值,这些值将存储在数组中。很基本的东西。但后来我开始疑惑:如果我只用a[i++]替换代码中的a[i]怎么办?所以我做了,结果输出是我(即用户)只是保持输入看似无限的值,即不停止只有5个输入。

现在,我假设可能发生的事情是,现在程序只是将每个新输入值替换为前一个并将其存储在数组的元素0中,一遍又一遍,因此它不会在5处停止。

我的这个假设是正确的吗?如果没有,那么请详细说明这里到底发生了什么。这可能是一个非常荒谬的事情需要关注,但我真的想知道这两种方式。

//array test
#include <iostream>

int main()
{
  int a[5] = { 0 };
  int i = 0;

  while(std::cin >> a[i++] && i < 5);
  return 0;
}

4 个答案:

答案 0 :(得分:2)

那么,您基本上会问ii++之间的区别是什么?它是相当基本的C / C ++(请注意这里的++!)。我建议你google for&#34; C ++ postincrement operator&#34; :)

答案 1 :(得分:1)

如果删除i ++并仅用i替换它,则无限期地替换[0]。

a [i ++]评估为[i],然后将i增加1。所以当我达到5时,你的条件的第二部分(i <5)不是真的并且从while循环退出。

答案 2 :(得分:0)

是的,你是对的。

只需测试一下,删除++并运行。

答案 3 :(得分:0)

如果你想要&#34;有一个没有代码的循环&#34;,不要使用std::cin >> a[i++]表达式作为条件(我认为它总是true)。更好地使用逗号操作,例如:

   while(std::cin >> a[i++], i < 5);

此外,在条件表达式中,例如(std::cin >> a[i++]) && (i < 5)左侧部分(即(std::cin >> a[i++]))可以被跳过,因为编译器完成了优化(所以i++将不会被执行)。