我想编译这个,但它给了我错误,即使我更改了引号,头文件中是否有任何错误,请让我知道
#include<iostream.h>
#include<conio.h>
void main()
{
char st[20];
cin>>st;
cout<<st<<endl;
if (st = 'a')
cout<<"This is a";
if (st = 'b')
cout<<"This is b";
getch();
}
答案 0 :(得分:2)
=
不用于比较,
if (st = 'a')
if (st = 'b')
它会尝试更改st
,上述比较结果始终为true
。
尝试使用std::string
:
#include <string>
...
std::string st;
std::cin >> st;
cout<<st<<endl;
if (st == "a")
cout<<"This is a";
if (st == "b")
cout<<"This is b";
答案 1 :(得分:2)
以下情况不太正确:
if (st = 'a')
if (st = 'b')
首先,=
是分配而不是比较。其次'a'
和'b'
是char
而不是字符串文字。
编写上述内容的正确方法是
if (strcmp(st, "a") == 0)
if (strcmp(st, "b") == 0)
那就是说,我鼓励你不要使用C字符串而是使用std::string
。
答案 2 :(得分:1)
if (st = 'a')
if (st = 'b')
在上述两行中,l值(左值)'st'指向数组的开头,并且其地址不能更改。这就是为什么你在编译中得到带有l值的错误的原因。使用相等(==)运算符而不是赋值(=)更改If条件,并取消引用st以获取开头的值。
if (*st == 'a')
if (*st == 'b')
答案 3 :(得分:0)
好吧,在我的学习上。您正在使用赋值运算符“=”
导入string.h指令,并使用该库的strcmp();
函数
希望这有帮助