C++ (m=cin.get())之间的差异=EOF&;m=cin.get()=EOF

C++ (m=cin.get())之间的差异=EOF&;m=cin.get()=EOF,c++,C++,我不知道为什么这两种代码的行为不同 我编写了一些接收用户输入然后打印出来的代码 我想第一个,(m=cin.get())=EOF,就像保存在m的一个字符,然后=返回1(因为“保存”成功)和,而循环永远不会结束(因为1!=EOF) 第二个是,m=cin.get()=EOF,表现得像我想要的那样。因为键入的字符保存在m中,所以m!=EOF是我的意思 一, #包括 使用名称空间std; int main(){ 字符m=0; 而((m=cin.get())!=EOF){ cout你的直觉是正确的,问题中的

我不知道为什么这两种代码的行为不同

我编写了一些接收用户输入然后打印出来的代码

我想第一个,
(m=cin.get())=EOF
,就像保存在
m
的一个字符,然后
=
返回1(因为“保存”成功)和
,而
循环永远不会结束(因为
1!=EOF

第二个是,
m=cin.get()=EOF
,表现得像我想要的那样。因为键入的字符保存在
m
中,所以
m!=EOF是我的意思

一,

#包括
使用名称空间std;
int main(){
字符m=0;
而((m=cin.get())!=EOF){

cout你的直觉是正确的,问题中的Ed Heal的评论也是正确的:这是一个关于

(m=cin.get())!=EOF
的情况下,基本上就是这样:

m = cin.get();
while (m != EOF) { ... }
m=cin.get()!=EOF
情况下:

m = (cin.get() != EOF);
while (m) { ... }

运算符的优先级可能是什么?为什么您认为“成功保存”返回1?没有成功代码来指示某些内容已“保存”;赋值的结果是赋值(因此
(m=cin.get())
赋值给
m
,并得出与
m
)相同的结果。也就是说,
cin.get()
返回
int
,而不是
char
,并且
m
应该这样声明;
EOF
超出了
char
可以表示的范围,因此如果
m
没有声明为
int
,循环将永远不会结束。如果执行
m=cin.get()!=EOF
,循环最终将结束,但
m
在循环中只有一个值,
1
(比较
cin.get()!=EOF
)@EdHeal非常感谢,我知道你在说什么。非常感谢。@ShadowRanger哦,太好了!我知道你的所有内容。因此我使用以下代码进行测试#包括使用命名空间std;int main(){int m,n;n=(m=3);非常感谢您编辑我的英语。我真的理解您的意思。非常感谢。我认为所有stackoverflow用户都是天使。~\bOur高兴:)
m = cin.get();
while (m != EOF) { ... }
m = (cin.get() != EOF);
while (m) { ... }