当被要求输入由空格分隔的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"
,则在按回车之前它不会执行。基本上我想知道循环实际上是如何工作的。任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
这是一个do
- while
循环,这意味着它至少输入一次。因此,在N
== 0
时,代码无法正确处理。
假设N
&gt; 0
和i
初始化为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
赋值),如果它能够起作用。