繁体   English   中英

while循环中的条件语句

[英]conditional statement in while loop

我肯定错过了什么。 我正在做一个学习c ++的练习,它要求用户输入c,p,t或g字符然后继续进行,否则重新请求提示符,所以我这样写:

#include <iostream>
#include <cstring>
#include <string>

using namespace std;

int main(void){
  cout << "Please enter one of the following choices:" << endl;
  cout << "c) carnivore\t\t\tp) pianist\n";
  cout << "t) tree\t\t\t\tg) game\n";
  char ch;
  do{
    cout << "Please enter a c, p, t, or g: ";
    cin >> ch;
    cout << "\"" << ch << "\"" << endl;
  }while(ch != 'c' || ch != 'p' || ch != 't' || ch != 'g');

  cout << "End" << endl;

  cin.clear();
  cin.ignore();
  cin.get();

  return 0;
}

这是行不通的,即使按了两个正确的字符之一,我得到的只是提示重新请求它。

但是,如果我更改此行:

while(ch != 'c' || ch != 'p' || ch != 't' || ch != 'g');

while(ch != 'c' && ch != 'p' && ch != 't' && ch != 'g');

这是为什么? 我的理解是,“ OR”语句应在其中一项测试正确的情况下起作用。

这是为什么? 我的理解是,“ OR”语句应在其中一项测试正确的情况下起作用。

究竟。 总有一项测试通过。 字符不是'c''p' 不能同时是'c''p' 因此,条件始终为真,从而导致无限循环。

带有连接词的替代条件之所以起作用,是因为ch等于替代之一时它就为假:不等式之一为假,因此整个条件为假。

我的理解是,“ OR”语句应在其中一项测试正确的情况下起作用。

好吧,您可以使用|| ,但表达式必须为:

while(!(ch == 'c' || ch == 'p' || ch == 't' || ch == 'g'));

通过应用德摩根定律 ,以上简化为:

while(ch != 'c' && ch != 'p' && ch != 't' && ch != 'g');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM