2

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

#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

4 回答 4

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";
于 2013-04-20T06:15:33.547 回答
2

以下内容不太正确:

if (st = 'a')
if (st = 'b')

首先,=是赋值而不是比较。其次'a',and'b'不是char字符串文字。

上面的正确写法是

if (strcmp(st, "a") == 0)
if (strcmp(st, "b") == 0)

也就是说,我鼓励您不要使用 C 字符串,std::string而是使用 C 字符串。

于 2013-04-20T06:16:02.940 回答
1
if (st = 'a')
if (st = 'b')

在上述两行中,l-value(left value) 'st' 指向数组的开头,其地址不能更改。这就是为什么你在编译中得到 l-value 的错误。使用相等(==)运算符而不是赋值(=)和取消引用 st 来更改 If 条件以获取开头的值。

if (*st == 'a')
if (*st == 'b')
于 2013-04-20T06:23:27.180 回答
0

嗯,在我的学习线上。您正在使用赋值运算符“=”导入 string.h 指令,并使用该strcmp();库的功能希望这会有所帮助

于 2014-07-02T12:56:23.820 回答