[英]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.