所以我做了下一個練習,只是while回圈:
撰寫一個程式,提示用戶輸入兩個整數。列印這兩個整數指定的范圍內的每個數字。
這是代碼:
#include <iostream>
int main()
{
std::cout << "Write two numbers: " << std::endl;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::cout << "The numbers between " << v1 << " and " << v2 << " are: " << std::endl;
while (v2 < v1 && v2 < v1)
{
std::cout << v2 << std::endl;
}
while (v1 < v2 && v1 < v2)
{
std::cout << v1 << std::endl;
}
}
現在我必須使用for回圈來完成它,我這樣做是這樣的:
#include <iostream>
int main()
{
std::cout << "Write two numbers: " << std::endl;
int a, b;
std::cin >> a >> b;
std::cout << "The numbers between " << a << " and " << b << " are: " << std::endl;
for (; a < b && a < b; a)
{
std::cout << a << std::endl;
}
for (; b < a && b < a; b)
{
std::cout << b << std::endl;
}
}
它看起來幾乎相同,但它有效。
我的問題是:我錯過了關于for回圈的一些東西,我可以做得更簡單嗎?
PD:就for回圈吧,我還沒入If章呢,我想一步步的上《C Primer 5th edition》。
uj5u.com熱心網友回復:
for是根據 指定的while,你不會遺漏任何東西。
for ( init-statement 條件opt ; 迭代運算式opt )陳述句
產生相當于的代碼:
{初始化陳述句while (條件) {陳述句 迭代運算式; } }
除了那個
- init-statement 宣告的名稱(如果init-statement是一個宣告)和condition宣告的名稱(如果condition是一個宣告)在同一范圍內(這也是statement的范圍 )。
continue在陳述句中將執行迭代運算式- 空條件相當于
while(true)
來自 cppreference
你不需要迭代運算式中的 任何東西for(;;)相當于while(true)
在迭代運算式中增加會更正常,而不是重復幾乎相同的測驗。
#include <iostream>
int main()
{
std::cout << "Write two numbers: " << std::endl;
int a, b;
std::cin >> a >> b;
std::cout << "The numbers between " << a << " and " << b << " are: " << std::endl;
for (; a < b; a)
{
std::cout << a << std::endl;
}
for (; b < a; b)
{
std::cout << b << std::endl;
}
}
uj5u.com熱心網友回復:
for 回圈旨在在兩個數字之間回圈。使用你的 for 回圈的意圖是不可讀的。看看這個
int end = 10;
for (int begin = 0; begin < end; begin){/*do something*/}
這是 for 回圈的標準結構。現在,對于您的示例,您將獲得以下資訊
#include <algorithm>
if (a > b) std::swap(a, b);
for (int begin = a; begin <= b; begin){
std::cout << begin << std::endl;
}
uj5u.com熱心網友回復:
沒有必要使用像a < b && a < b因為a < b包含在 a < b條件中的東西。因此,僅使用 a < b您將獲得相同的結果。
現在關于for你應該這樣寫只是為了讓你的代碼有點清晰:
for (; a < b; a)
{
std::cout << a << std::endl;
}
我沒有使用初始化陳述句,因為您已經初始化了變數,但是我鼓勵您a在for陳述句中進行初始化
一般來說,for分為三個部分:
for (<initialization sentence>; <condition sentence>; <post-execution sentence>)
初始化僅在到達 for 陳述句時運行,并且在滿足條件時運行回圈。執行后它通常用于增加或改變條件標準中涉及的變數的狀態。您唯一的限制是條件必須是布爾陳述句。
這些部分都不應該是分配、通用比較或變數增量。您可以使用任何適合您的要求并滿足 for 約束的內容。
總而言之,for 陳述句是一段時間的“包裝”結構。兩者都可以得到相同的結果。區別在于代碼的更清晰的影像和對演算法的更好理解。
uj5u.com熱心網友回復:
問題中的代碼有點令人困惑,因為它試圖一次做幾件事。我會把它們分開。
與其撰寫兩個回圈,不如更改限制: if (v2 < v1) std::swap(v2, v1);
現在很容易:
while ( v1 < v2)
std::cout << v1 << '\n';
同樣的事情for回圈。調整限制后,只需執行以下操作:
for ( ; a < b; )
std::cout << a << '\n';
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408645.html
標籤:
下一篇:管道符號|FOR/F回圈中的意外
