由“左操作数必须为左值”引起的反思

本文分享了一次编程经历,在调试C++程序时遇到的关于while循环与赋值操作符优先级的问题,通过调整代码顺序及正确使用括号解决了编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今日写一个程序无论如何也调不好,后来一步步做改动筛选,直到筛到这一步

    bool in_word=true;
    char ch;
    while (ch=getchar() && in_word){}

循环到这一步无论如何都不继续进行,于是我就改变了一下顺序。

ch=getchar();
while(in_word){}

程序又可以正常运行了,遂将获取字符的语句顺手加到了后面。

while (in_word && ch=getchar()){}

然后就出现了error C2106: “=”: 左操作数必须为左值。
查阅资料后发现原因在于=和&&的优先级问题,=的优先级比&&低,所以先执行&&,原代码等效成while((in_word&&ch)=getchar()){}
所以应加上括号while(in_word&&(ch=getchar())){}

以后写代码应该多注意!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值