所需代码的说明

时间:2014-09-13 17:45:43

标签: c++

当被要求输入由空格分隔的N个整数时,有人编写了以下代码

  do
   {
       cin>>temp;
      name[i]=temp;


       if(i==N-1)
           break;
       i++;


   }while(true);

这里将其初始化为零。我想知道为什么这段代码正常工作。如果我使用N=4提供以下输入, 2 34 5 87,数组name正确存储值。 name[0]=2 name[1]=34等等。  如果我在cin语句之后写cout<<"Hello",则在按回车之前它不会执行。基本上我想知道循环实际上是如何工作的。任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

这是一个do - while循环,这意味着它至少输入一次。因此,在N == 0时,代码无法正确处理。

假设N&gt; 0i初始化为0并且从cin读取的输入正确,则循环将一直运行到{ {1}}陈述。无论终止条件如何,break都将终止循环。

break == break为真时执行i语句。这发生在N-1之后,这意味着在循环终止时已分配name[N-1] = temp项,因为N在每次迭代时递增i!= i是的。

答案 1 :(得分:0)

默认情况下,cin将空格视为分隔您的&#34;令牌&#34;或输入的部分。每次使用cin时,它都会为您提供数字。

现在试试这个评论很多的版本。

do {
    /* Read a number */
    cin >> temp;
    /* Save the number into the i'th element of the array name */
    name[i] = temp;

    /* If we have reached the maximum size of the array as given by N, exit the loop. */
    if (i == N-1) {
        break;
    }
    /* If we haven't reached the maximum size, increase i by 1 and keep saving to the array. */
    i++;
} while(true);

代码并不好。最好将(i < N-1)作为while条件,而不是使用break

另请注意,这只是一个更大的功能。较大的函数必须声明变量(例如给N赋值),如果它能够起作用。