我是學習 C 的初學者。就在今天,我嘗試學習布爾運算子和if-else陳述句。
這是代碼:
int main(){
//if-else statement
int a, b;
bool result = (a < b);
std::cout << "input number 1 : ";
std::cin >> a;
std::cout << "input number 2 : ";
std::cin >> b;
std::cout << std::boolalpha << result <<std::endl;
if(result == true){
std::cout << a << " is less than " << b << std::endl;
}
if(!(result == true)){
std::cout << a << " is NOT less than " << b << std::endl;
}
return 0;
}
以下是幾次執行后的結果:

最初結果很好,但幾次之后就出錯了。
有人知道這是什么原因嗎?
uj5u.com熱心網友回復:
您的錯誤是在為這些變數result 分配任何適當的值之前比較兩個變數并保存。換句話說,您比較未初始化的變數a和b具有未定義值的變數。
首先,你這樣做:
bool result = (a < b);
然后在你得到值之后:
std::cin >> a;
std::cin >> b;
您應該改為執行以下操作:
// ...
int a, b;
std::cout << "input number 1 : ";
std::cin >> a;
std::cout << "input number 2 : ";
std::cin >> b;
bool result = a < b; // <-- move this down here!
// ...
uj5u.com熱心網友回復:
您希望在以后使用它時result得到評估。a == b而是用一次bool result = (a < b);初始化,之后它的值不會改變。當您宣告代碼具有未定義的行為時,既沒有也沒有初始化。result(a < b)abresult
您可以result使用 lambda 運算式創建一個函式物件以使其按預期作業。但是,要呼叫它,您必須添加():
int main(){
//if-else statement
int a = 0;
int b = 0;
auto result = [&](){ return a < b; };
std::cout << "input number 1 : ";
std::cin >> a;
std::cout << "input number 2 : ";
std::cin >> b;
std::cout << std::boolalpha << result() <<std::endl;
if(result()) {
std::cout << a << " is less than " << b << std::endl;
} else {
std::cout << a << " is NOT less than " << b << std::endl;
}
}
您應該始終初始化變數。使用未初始化變數的值是未定義的行為,并且在您不初始化變數時很容易發生(如在您的代碼中)。而不是if (condition) {} if (!condition){}你可以使用if (condition) {} else {}. 而不是if (result() == true)你可以寫if (result()). 并且return 0;隱含在 中main,您無需撰寫它。
uj5u.com熱心網友回復:
你應該是整體代碼。
評論中的解釋:
int main() {
//if-else statement
int a, b;
std::cout << "input number 1 : ";
std::cin >> a;
std::cout << "input number 2 : ";
std::cin >> b;
bool result = (a < b); // put this here, because now a and b have
// determined values
std::cout << std::boolalpha << result << std::endl;
if (result) { // or simple if (a < b) and drop result alltogether
std::cout << a << " is less than " << b << std::endl;
}
else { // no need for testing the opposite of result
std::cout << a << " is NOT less than " << b << std::endl;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/483644.html
