2013-04-07 31 views
0

在程序中我有一個char數組。它從輸入字符的用戶那裏獲得輸入,當輸入字母b時,它應該用字母a代替。相反,它用字母a代替所有元素,而不是用a代替字母b。它爲什麼這樣做?這個程序爲什麼用'a'代替所有字符

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
const int buff_len = 10; 
char buffer [buff_len]; 

for(int i = 0; i < buff_len; i++){ 
     cin >> buffer[i]; 

} 

for(int j = 0; j < buff_len; j++){ 
    if(buffer[j] = 'b'){ 
     buffer[j] = 'a'; 
    } 

} 

for(int i = 0; i < buff_len; i++){ 
    cout << buffer[i]; 
} 


system("Pause"); 
return 0; 
} 
+2

你有三個答案,但我有一個問題給你:你爲什麼沒有啓用編譯器警告或(如果你有)爲什麼你忽略它們? (或者還有*編譯器在那裏沒有給出警告?) – 2013-04-07 10:50:11

回答

2

使用==進行比較。

=是分配操作員。

你在做什麼總是被分配到'a'因爲buffer[j]if(buffer[j] = 'b')始終評估爲真正

爲什麼?

賦值的表達式返回賦值,在這種情況下if(buffer[j] = 'b')將始終爲真,這就是爲什麼總是執行if語句之下的代碼的原因。

+0

我應該知道這一點。我不知道發生了什麼事。 – 2013-04-07 11:01:44

0

爲了比較==是必需的。 buffer[j] = 'b'(任務)將始終爲真。

if(buffer[j] == 'b') 
1

嘗試更新:

if(buffer[j] = 'b'){ 

到:

if(buffer[j] == 'b') 
      ^^^ 

因爲if(buffer[j] = 'b')總是會評估爲真,這就是爲什麼下面的語句總是被執行。

buffer[j] = 'a'; 
0

因爲buffer[j] = 'b'的返回值總是等於true。

相關問題