边做边循环问题
Do While Loop Question
do
{
cout << "Car is coming ... " << "[P]ay or [N]ot?" << endl;
ch=getch();
} while ( ch !='q' || ch != 'Q');
为什么上面的代码不起作用,而下面的代码却不起作用?我以多种方式尝试在每个语句周围加上括号,编译器每次都会弹出一个错误,直到我按照下面所做的那样重新分组它们。我只是想知道它为什么这样做。
do
{
cout << "Car is coming ... " << "[P]ay or [N]ot?" << endl;
ch=getch();
} while ( !(ch=='q' || ch=='Q') );
我正在使用Visual Studio 2008作为我的编译器;x86体系结构。
学习德
摩根定律
(不是A)或(不是 B)
与
不是(A 或 B)。
(ch != 'q' || ch != 'Q')
总是正确的:"ch
不等于'q'
或ch
不等于'Q'
"。
问题是你的布尔逻辑是关闭的,两个while
条件不一样。
- 顶部:字符不是"q"或不是"Q"
- 底部:字符不是("q"或"Q")
对于每个可能的字符,顶部将返回 true。 底部将为每个字符返回 true,除了"q"和"Q"
我认为您希望在第一个示例中这样做:
ch !='q' && ch != 'Q'
您希望输入不是q
也不是Q
。
!(ch=='q' || ch=='Q')
等效于ch!='q' && ch!='Q'
。另见德摩根定律。
你的逻辑倒过来了,这是我否定它的工作。 根据德米尔根定律,!(ch == 'Q' || ch == 'q')
与ch != 'Q' && ch != 'q'
相同。
由于 a 如果它不能同时little q
和big Q
,while (ch != 'Q' || ch != 'q')
没有意义,因为如果它是"Q",那么它就不会是"q",反之亦然。
当使用"!"反转所有逻辑时,通过将条件运算符"=="反转为"!="做对了,但是您忘记将逻辑运算符"||"反转为"&&"。 因此,这应该是正确的:
while (ch!='q' && ch!='Q');
我使用 C#,所以虽然上面的代码可以工作,但我会使用它,因为它更容易阅读:
while (ch.ToUpper() != 'Q');
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 在java中解决这段代码时面临循环中的问题
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 在 for 循环中查找问题时遇到困难
- 嵌套for循环C++的问题(初学者)
- 退出简单while循环时出现问题
- 循环无限运行C++解决骑士之旅问题
- Visual Studio 2017循环自动向量化问题
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 嵌套While循环不起作用(C++问题)
- 使用 GMP 的 while 循环出现问题
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- OpenMP for 循环并行性问题
- 这个返回元素位置的基于循环的函数有什么问题?
- 为什么循环会导致指针出现问题?
- 使用基于范围的循环迭代矢量时出现问题
- 在 c++ 中循环遍历数组时遇到问题
- 运行无限循环的最小二叉树问题
- 在C++中循环访问自定义结构列表的小问题
- 在 for 循环中更新两个变量时遇到问题C++