在我的计算机科学入门课程中,一个提示问我们:
"给定已经声明的char变量c,写一些代码,重复从标准输入读取一个值到c,直到最后输入'Y'或'y'或'N'或'n'."
我输入的代码会导致无限循环,但逻辑对我来说很有意义.有人可以解释为什么以下布尔表达式有问题吗?
while (c != ('n' || 'N' || 'y' || 'Y'))
cin >> c;
Run Code Online (Sandbox Code Playgroud)
因为那个表达不符合你的想法.正确的是
while (c !='n' && c != 'N' && c!= 'y' && c != 'Y')
Run Code Online (Sandbox Code Playgroud)
但是你上面提到的那个会发生什么?
('n' || 'N' || 'y' || 'Y')
Run Code Online (Sandbox Code Playgroud)
这是一系列4个布尔OR.第一个是'n' || 'N',chars 'n'和'N'转换为布尔(两者true),因此整个表达式是true.
所以你离开了
while (c != true)
Run Code Online (Sandbox Code Playgroud)
c != 1与您输入ASCII值为1的字符相同,并进入循环.由于这不是可打印的字符,键盘输入不会让您退出循环.