c++实时变量的作用域

c++中我们经常定义实时变量,如:

for(int i = 0; i < 10; i++)
{
    //....
}

这里就定义了一个实时变量i,作用域为整个for循环


那么这么一段代码呢:

while((char c = cin.get()) != 'q')
{
      //.....
}

这段代码也定义了一个实时变量c,咋一看这段代码是没有问题的

但是在编译器中是会报错的


原因是什么呢??


(char c = cin.get())

这一句定义了一个实时变量c,而这个变量的作用域只在括号呢,当这个括号内运算完毕后,变量c便无效了~

再与'q'进行比较,因此编译器肯定会报错咯~~


这种情况下就不会出错:

while(char c = cin.get() != 'q')
{
    //.......
}
这样的话c的作用域就是整个while循环

但由于!= 的优先级比 = 高

于是先进行cin.get() != 'q'的比较,然后将比较后的结果由bool型转为char型赋给c

所以若输入不为q时,c的值会为笑脸





以下是正确且符合要求的代码:

#include <iostream>
#include <cstdlib>

using namespace std;

int main(void)
{
	char c;
	while( (c = cin.get()) != 'q')
	{
		cout << c;
	}

	system("pause");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值