2017-02-19 58 views
-3

我是C++的初學者。我從學校做了一些家庭作業來做一些練習。其中之一是比較用戶輸入的3個變量,並使程序在大或小的屏幕上打印。問題是,每次運行代碼時,程序總是打印第一個輸入的數字,即使它不符合條件。這是一個代碼示例。我到處看,我不明白什麼是錯的。如何比較多個變量與其他語句?

#include <iostream> 

using namespace std; 

int var1 = 0; 
int var2 = 0; 
int var3 = 0; 

int main() 
{ 
    cout << "Write 3 integer numbers" << endl; 
    cin >> num1 >> num2 >> num3; 

    if (var1 < var2,var3) 
    { 
     cout << num1 << " is smaller"<< endl; 
    } 

    else if (var2 < var1,var3) 
    { 
     cout << num2 << " is smaller"<< endl; 
    } 

    else if (var3 < var1,var2) 
    { 
     cout << num3 << " is smaller"<< endl; 
    } 

    system("pause"); 


} 
+4

你不能使用那樣的逗號。 – TheUndeadFish

+1

'var2

+0

在表達式中,','運算符評估它的兩個操作數並返回第二個操作數的結果。所以你的前兩個'if'語句只是測試'var3'是否爲非零,並且類似於最後一個。 –

回答

1

從你的代碼判斷,我假設你想找到最小的3個數字。但是,使用逗號是而不是是正確的方式,因爲逗號是用於其他目的的操作數。

if ((variable_1 [operator] variable_2) [AND/OR/NOT operator] (variable_1 [operator] variable_3) ...) 
  • 如果你想多個變量在一個if語句條件比較,那麼就應該使用下面的模板(這是凌亂的,但我會解釋)完成variable_n其中n表示數字,表示可以在if語句中進行比較的變量。

  • [operator]指示各種比較運算符可以使用的,像<,>,= <,等等...
  • [AND/OR/NOT operator]是運營商 「||」, 「& &」 或 「!」被使用。
  • (...)意味着您可以包含更多的比較。

&&運算符(稱爲邏輯AND運算符)是您應該使用的運算符。使用此運算符時,只有當「& &」兩側的兩個比較均爲真時,表達式纔會返回true。它遵循語法:

(x > y) && (x > z) // Only if x is greater than y and z will the expression return true. 

我已經固定的代碼爲你下面(有除了if語句許多錯誤:

int main() 
{ 
    // These variables don't have to be global for your case 
    int var1 = 0; 
    int var2 = 0; 
    int var3 = 0; 

    cout << "Write 3 integer numbers" << endl; 
    cin >> var1 >> var2 >> var3; // You don't need num1, num2, num3. 

    if ((var1 < var2) && (var1 < var3)) 
     cout << var1 << " is smaller"<< endl; // If there is only 1 statement in your if-condition, then curly braces are unrequired, just a styling tip I like. 

    // I don't want to give the full solutions here, as this is your learning experience. Just fixed dome other errors in your code. You can use the first if-statement to do the other else-if statements. 

    system("pause"); 
} 
從if語句

除此之外,我會指出出在你的代碼的其他錯誤:

  • 首先,你爲什麼宣佈var1var2var3爲全局變量,你的主要功能之外的我? t沒有錯(即使它們是全局變量,代碼也能正常工作),但在你的情況下,它是不需要的。其次,你比較變量var1var2var3在你的if條件。然而,他們設置爲零,而你把輸入3個完全不同的變量,num1num2num3。這使得var1,var2var3保持不變,導致0,0和0之間的比較。您不需要num1,num2,num3

  • 第三,你的代碼的邏輯本身是容易出錯,尤其是當一些數字輸入的是相同的。嘗試輸入(1,1,1)或(1,1,2)。我沒有解決這個問題,因爲它會涉及到更改很多代碼本身。


順便說一句,如果你想知道逗號運算符做什麼,我在下面解釋它:

[來源:運營商 - C++教程] (http://www.cplusplus.com/doc/tutorial/operators/

逗號運算符(,)用於分隔作爲單個表達式的佔位符找到的多個表達式。當評估一組表達式以給出最終結果時,將使用最遠右側的表達式。看到這個例子:

int number, number2; 
number2 = (number = 5, number += 7, number/4); 
cout << number2 << endl; 

這裏做的事情在這裏是2個變量numbernumber2在這裏聲明。在下一行中,number2的數字除以4,最初設置爲5,然後增加7.第三行輸出4,爲(5 + 7)/ 4 = 3.

希望這有所幫助。如果您需要進一步解釋,澄清或不清楚的地方,請在郵件中通知我。祝你好運!