[英]Explanation for the code needed
当要求输入由空格分隔的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"
,它直到我按return才执行。 基本上我想知道循环是如何工作的。 任何帮助将不胜感激。 谢谢。
这是一个do
- while
循环,这意味着它至少输入了一次。 因此,当N
== 0
时,代码无法正确处理这种情况。
假设N
> 0
且i
初始化为0
并且从cin
读取的输入正确,则循环运行直到break
语句。 不论终止条件如何, break
都会终止循环。
当i
== N-1
为true时,执行break
语句。 这是在name[N-1] = temp
之后发生的,这意味着在循环终止时已分配了N
项目,因为i
在每次迭代中都会递增i
!= N-1
。
缺省情况下, cin
将空格视为分隔您的“令牌”或输入片段。 每次使用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
赋值)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.