2014-09-13 96 views
0

有人寫了下面的代碼,當記者問到在一個空格分隔解釋的代碼需要

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


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


    }while(true); 

這被初始化爲零輸入N個整數。我想知道爲什麼這段代碼正常工作。如果我給出以下輸入N=4, 2 34 5 87,數組name正確存儲值。 name[0]=2 name[1]=34等。 如果我在cin語句之後編寫cout<<"Hello",它將不會執行,直到我按回車。基本上我想知道循環是如何工作的。任何幫助將不勝感激。謝謝。

+0

什麼讓你認爲它是正確的代碼?鑑於未檢查輸入是否成功,顯然是錯誤的。另外,它不適用於'N == 0',因爲它至少讀取一個元素。順便說一句,你的具體問題是什麼? – 2014-09-13 17:47:48

+0

好吧,我在CodeChef問題中使用它,它工作正常。 :) – 2014-09-13 17:50:03

+0

代碼應該做什麼? – 2014-09-13 17:50:32

回答

1

這是一個do - while循環,這意味着它至少輸入一次。因此,代碼不能正確處理的情況下N == 0

假設N>0i被初始化爲0和從cin讀出的輸入是正確的,那麼循環運行,直到break語句。無論終止條件如何,break都將終止循環。

i == N-1爲真時,執行break語句。這發生在name[N-1] = temp之後,這意味着N項在循環終止時已被分配,因爲i在每次迭代時遞增,其中i!= N-1爲真。

0

默認情況下,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-condition,最好不要使用break

另請注意,這只是一個更大的功能。如果要運行的話,更大的函數必須聲明變量(例如給值N)。