2013-01-20 42 views
0

我正在使用下面的代碼(它已被超級簡化以獲得我的問題的根源)。C++變量值不變

#include <iostream> 
namespace std; 

int user; 
int submit(int); 

int main() { 

    user = 1; 
    submit(user); 

    user = 2; 
    submit(user); 

    return(0); 
} 

int submit(int user) { 

    if (user = 1) { 
     printf("1"); 
    } else if (user = 2) { 
     printf("2"); 
    } 
    return(0); 

} 

我以爲這會打印出「12」,但我得到「11」。在第二次調用函數之前,變量「user」是否被重新定義?

這裏怎麼回事?

回答

8

使用==而不是=來檢查user的值。您正在覆蓋這些值(與=),而不是將它們進行比較(與==)。

+0

哇......我太蠢了。 :/ 謝謝! – codedude

6

您在功能體中使用的是=而不是==

if (user = 1) { //This assigns user the value of 1 and then prints 1 
     printf("1"); 

正確的測試條件應該是:

if (user == 1) { //This checks the value of user and then prints if the condition is true 
     printf("1"); 

在編譯時,如果使用gcc,增加選擇-Wall是在這種情況下有益,因爲它給你一個關於試驗任務的警告條件。

+0

明白了!謝謝。我需要密切關注那些等號:) – codedude

1

在專家的回答中,您正在使用=而不是在函數體中使用==,這就是爲什麼你會得到錯誤的輸出。

在這裏,我想清楚你的概念爲什麼會發生: 我希望你知道賦值運算符和相等運算符之間的區別。如果不是,我將簡要描述它。

賦值運算符(=):

賦值操作符分配一個值到一個變量。例如

user = 1;

此語句分配整數值1到可變user

此語句總是被執行,表示它是邏輯上TRUE聲明(假設變量user已聲明)。

至於有沒有比較之類的東西,所以如果我們使用賦值運算符(=)作爲條件,它將始終返回TRUE1

等號(==):

等號運算符用於比較兩個值,以確定它們是否相等。

user == 1;

本聲明將與1變量user的價值相比較,它會返回TRUE如果user1否則將返回FALSE

結果:賦值運算符將始終返回TRUE但比較操作可能會返回TRUEFALSE

現在回來到您的代碼:

int submit(int user) { 
//as you're using assignmnt operator this if condition will always true regardless of input 
    if (user = 1) {  
     printf("1"); 
//because if condition is true, it will never go into else if condition 
    } else if (user = 2) { 
     printf("2"); 
    } 
    return(0); 
} 

所以,實際上,當你調用這個函數,它會不顧傳遞給這個函數的user價值1每次打印。因爲,你已經調用了這個函數2次。因此,它將打印11