0

プログラムには、char配列があります。文字を入力するユーザーから入力を取得し、文字 b が入力されると、文字 a に置き換えます。それどころか、単に文字 b を a に置き換えるのではなく、すべての要素を文字 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;
}
4

4 に答える 4

2

==比較するために使用します。

=代入演算子です。

は常にtrueと評価される'a'のでbuffer[j]、あなたがしていることは常に割り当てです。if(buffer[j] = 'b')

なんで?

割り当ての式は、割り当てられた値を返します。この場合if(buffer[j] = 'b')は常に true になります。そのため、if ステートメントの下のコードが常に実行されます。

于 2013-04-07T10:46:12.037 に答える
1

更新してみてください:

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

に:

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

常に true と評価されるためif(buffer[j] = 'b')、以下のステートメントが常に実行されます。

buffer[j] = 'a';
于 2013-04-07T10:47:12.610 に答える
0

比較には == が必要です。buffer[j] = 'b'(割り当て) は常に true になります。

if(buffer[j] == 'b')
于 2013-04-07T10:47:01.563 に答える
0

buffer[j] = 'b'には常に true に等しい戻り値があるためです。

于 2013-04-07T10:54:28.403 に答える