繁体   English   中英

所需代码的说明

[英]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 > 0i初始化为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM