簡體   English   中英

對於循環不停止

[英]For Loop Not Stopping

我在一個不會停止的函數中有一個for循環。 這是整個函數,用於查找人的成績,將它們添加到一起,然后在屏幕上顯示平均值:

float Student::average() { 
   cout << "How many grades would you like to enter? (Up to ten)\n";
   float x;
   cin >> x;

   cout << "What is your first grade?";
   cin >> grade[0];
   int i = 1;
   for (i; i = x; i++) {
      cout << "What is the next number?\n";
      cin >> grade[i];
   }
   averageGrade = std::accumulate(grade, grade+10, 0.0);
   averageGrade = averageGrade / 10;

   return averageGrade;
}

這是for循環:

for (i; i = x; i++) {
   cout << "What is the next number?\n";
   cin >> grade[i];
}

錯誤也輸出(但仍然允許程序運行)說:

1> c:\\ users \\ hastudent \\ documents \\ visual studio 2008 \\ projects \\ weapon \\ weapon \\ weapon.cpp(25):警告C4244:'=':從'float'轉換為'int',可能會丟失數據

1> c:\\ users \\ hastudent \\ documents \\ visual studio 2008 \\ projects \\ weapon \\ weapon \\ weapon.cpp(30):警告C4244:'=':從'double'轉換為'float',可能會丟失數據

程序達到要求下一個數字的程度。 然后你輸入數字,它一直在問你這個。

for循環應為:

for (int i = 1; i < x; i++)

你現在擁有的( i = x )是xi賦值 ,而你可能想要進行比較 在這種情況下,使用的正確比較是“小於”( i < x )。

你的for循環永遠運行,因為:

  • i = x是一個賦值,而不是一個相等的測試。
  • 它的值是左側的值
  • 你給它非零值
  • 並且在C ++中為非零值。

如果要進行相等性測試,請使用==。 但是,在這種情況下,你想要一個<thest。

你試過在for循環中打印i的值嗎? 你從x開始,並繼續遞增。

這應該是:

for(int i=0; i<x; i++) { /* do something */ }

通常你從0開始計數,而不是1。

主要的問題是你在哪里做i = x你想要放置在循環的每次迭代中必須保持的條件(稱為循環不變量 ),即如果你以i = 0開始,則i <x,或者如果你從i = 1開始計算,i == x正如其他人所建議的那樣。

for循環的第二部分是“何時繼續”條件,而不是“何時停止”。

既然你從索引1開始(非常規但在C ++中沒有聞所未聞),你應該迭代到有問題的數字:

for(i = 1; i <= x; ++i)

請注意,即使條件是“何時退出” =是C ++中的賦值,而==是相等比較。

在FOR循環中使用!=(比較運算符)而不是=(賦值運算符)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM