在函数main中无法编译,需要Lvalue

时间:2013-04-20 06:13:41

标签: c++

我想编译这个,但它给了我错误,即使我更改了引号,头文件中是否有任何错误,请让我知道

#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();
}

4 个答案:

答案 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();函数 希望这有帮助