Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么此程序将所有字符替换为';a';_C++_Arrays_Char - Fatal编程技术网

C++ 为什么此程序将所有字符替换为';a';

C++ 为什么此程序将所有字符替换为';a';,c++,arrays,char,C++,Arrays,Char,在程序中,我有一个字符数组。它从输入字符的用户处获取输入,当输入字母b时,它应将其替换为字母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

在程序中,我有一个字符数组。它从输入字符的用户处获取输入,当输入字母b时,它应将其替换为字母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;
}
#包括
#包括
使用名称空间std;
int main()
{
常数int buff_len=10;
字符缓冲区[buff_len];
对于(int i=0;i>缓冲液[i];
}
对于(int j=0;j不能使用
=
进行比较

=
是赋值运算符

因为
if(buffer[j]='b')
的计算结果总是为true,所以您要做的就是始终将
'a'
赋值给
缓冲区[j]

为什么?


赋值表达式返回赋值,在这种情况下,
if(buffer[j]='b')
将始终为真,这就是为什么if语句下面的代码总是被执行。

使用
=
进行比较

buffer[j] = 'a';
=
是赋值运算符

因为
if(buffer[j]='b')
的计算结果总是为true,所以您要做的就是始终将
'a'
赋值给
缓冲区[j]

为什么?


赋值表达式返回赋值,在这种情况下,
if(buffer[j]='b')
将始终为真,这就是为什么if语句下面的代码总是被执行的原因。

对于比较==是必需的。
buffer[j]='b'
(赋值)将始终为真

if(buffer[j] == 'b')
buffer[j] = 'a';

对于比较,需要==。
缓冲区[j]='b'
(赋值)将始终为真

if(buffer[j] == 'b')
尝试更新:

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

因为
if(buffer[j]='b')
总是被计算为true,所以下面的语句总是被执行

buffer[j] = 'a';
尝试更新:

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

因为
if(buffer[j]='b')
总是被计算为true,所以下面的语句总是被执行

buffer[j] = 'a';

因为
buffer[j]='b'
的返回值总是等于true。

因为
buffer[j]='b'
的返回值总是等于true。

您有三个答案,但我有一个问题要问您:为什么您没有启用编译器警告,或者(如果有)为什么忽略它们?(或者仍然有编译器没有给出警告???)你有三个答案,但我有一个问题要问你:为什么你没有启用编译器警告或者(如果你有)为什么忽略它们?(或者仍然有编译器没有给出警告??)我早该知道的。我不知道发生了什么。我早该知道的。我不知道发生了什么。