2011-08-30 63 views
1

這裏是我的代碼片段:爲什麼這個if執行時​​我還沒有給出任何輸入?

int a; 
if(a=8) 
    cout<<"Its right"; 
else 
    cout<<"Not at all"; 
getch(); 
return(0); 

我得到的輸出Its right而我沒有給任何輸入有它只是一個分配到a=8

**Borland Compiler**給出以下2個警告並執行代碼。

1:可能的不正確的分配(α= 8)

2: 'A' 被分配是從未使用過的值。

+0

你到底在問什麼?大多數答案似乎假設你想知道你的錯誤在哪裏,但是使用「它的正確」似乎表明你的代碼工作正常。我認爲這個問題是爲什麼編譯器會針對(正式)正確的代碼發出警告,並按照您的意願進行操作。當你提出問題時,請考慮包括一個真正的問題,而不是僅僅發佈一段代碼,並讓我們其他人猜測。 –

回答

8

當你寫:

if(a=8) 

分配 8的變量,並返回一個,所以你寫有效:

a = 8; 
if(a) 

這是不可零,因此被視爲「真」。

我(和編譯器)懷疑你打算寫(注意:==,而不是=):

if(a==8) 

這就是爲什麼你會得到警告。 (請注意,在這種情況下,a仍未初始化,因此行爲未定義。您仍將收到警告,並且仍可能返回true ...)

+0

再次,如果可能是真的。你不能確定一個單位變量的值:) –

+0

@George:非常真實。編輯包括。 –

+0

我明白'='和'=='之間的區別。如果我使用'=='而不是'=',那麼'else部分將會執行。所以我想知道爲什麼賦值是真的並執行? – avirk

1

您需要==(double等於)。單一=是一項任務;當按照您在此處所做的表達式處理時,它會評估爲賦值的值,在這種情況下,值爲8.將0視爲False,其他值爲True,所以(a = 8)== 8 == True。

2

a = 8指定8a並返回賦值的值,即88與0不同,因此被認爲是true。測試apsses和程序輸出"Its right"

您可能已寫入if (a == 8)正確測試a的值而不更改其值。

2
if(a=8) 

意味着爲a賦值8,然後用它來評估if語句。由於8不爲零,它本質上轉化爲TRUE(任何非零值都爲真)。

2

第一個警告是因爲在條件測試中寫入=的頻繁錯字,你的意思是==。這個警告背後的哲學是,在程序員重寫if(a=b)時,他希望在少數情況下重寫if((a=b)!=0),而不是花費大量時間調試結果,如果他錯誤地得到任務而不是比較結果,那麼負擔會更輕。

第二個警告正是它所說的:看起來像是一個錯誤,有一個局部變量,您分配一個值,但從來沒有使用。

由於它們只是警告,如果您認爲自己知道自己在做什麼,那麼可以自由地忽略它們。編譯器甚至可以提供一種方法讓你關閉它們。

2

其他人的答案是正確的:)

if (a = 8) // Sets a to be 8 (and returns true so the if statement passes) 
if (a == 8) // Check to see if a is equal to 8 

我只想補充一點,我總是(習慣勢力!)寫if語句是這樣的:

if (8 == a) { 

現在,如果我錯過出了=之一,編譯器不給我一個警告,它給了我一個錯誤:)

相關問題