C++在两个不同的条件下执行/while循环
C++ do/while loop with two different conditions
我希望do while循环检查输入的输入是R还是p。我认为它正在检查两者,当我运行到那个部分时,它会暂停一分钟,然后我得到"超过CPU限制(已转储内核(。另一个相关的问题是,我有摔坏东西的危险吗?
/************************************************/
/* Name: servcode */
/* Description: Get service type */
/* Parameters: N/A */
/* Return Value: servcode */
/************************************************/
char servcode()
{
char servcode = 'a'; // Define variable for service code
char serviceyn = 'n'; // Define variable for user verify
int i = 1; // Define variable for sentinel loop
do {
cout << "n" << "n" << "Please enter your service code, [R]egular or [P]remium: " << "n";
cin >> servcode;
while ((servcode != 'R', 'P') && (i < 3));
{
cout << "n" << "Error - invalid service code, please try again.";
cout << "n" << "Please enter your service code: ";
cin >> servcode;
i++;
if (i == 3)
{
cout << "n" << "Too many invalid attempts, program terminating." << "n"
<< "Have a nice day. " << "n" << "n";
exit (0);
} //end if
} //end while
cout << "n" << "You entered: " << servcode << "n"
<< "Is that correct? [y,n]";
cin >> serviceyn;
} while (serviceyn != 'y'); // end do/while loop
return servcode;
}
正确的语法是:
while (servcode != 'R' && servcode != 'P' && i < 3)
注意扩展的比较和末尾分号的删除:
(servcode != 'R', 'P')
是一个有效的C++,但它不能做您期望它做的事情- 分号使语句成为一个具有空正文的循环,因此它将永远继续执行,因为循环条件永远不会改变
更改:
while ((servcode != 'R', 'P') && (i < 3));
至:
while ((servcode != 'R') && (servcode != 'P') && (i < 3))
请注意删除了不需要的分号。
您需要这样做:
while(something != 'a' && something != 'b')
您使用的是逗号运算符,它会丢弃除最后一个表达式之外的每个表达式的结果,因此:
while(something != 'a', 'b')
将比较something
和a
,忽略结果,并使用'b'
作为循环的条件。'b'
是一个非零值,因此它始终为true,循环将永远继续(或者直到内存耗尽,或者其他原因停止(。
(servcode != 'R', 'P')
应为:
(servcode != 'R') && (servcode != 'P')
感谢PaulR的纠正。我的大脑不正常。
让我们分解一下这个语句,看看它在做什么。我加了一些标点符号,但不会改变陈述的意思。
while (((servcode != 'R'), ('P')) && (i < 3)) { };
逗号运算符分隔两个不同的表达式,并返回第二个表达式的值。第一部分可能会达到你的预期,但第二部分只是一个字面字符"P",这总是正确的!
语句末尾的分号标记将作为while循环执行的内容的正文。这是一个什么都不做,不会改变servcode
或i
的值,所以很明显,一旦你进入循环,你就永远不会离开它。这是一种常见的错误。
相关文章:
- 为什么简单的算术减法在"if"条件下不起作用?
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- 改进简单条件下C++样式
- 防止SC_METHOD在没有事件/触发器的情况下执行
- 唤醒多个线程以在每个条件下工作一次
- 如何在 Linux 下执行 shell 命令 unsing QProcess?
- Visual Studio 发布模式阻止在调试模式下执行的代码.使用 WinHTTP 和多线程
- C++项目编译强制使用 /clr 选项,尽管在没有公共语言运行时支持的情况下执行它
- "is defined"宏检查及其调用必须处于不同的条件下吗?
- Craps游戏在循环不满足退出条件时执行
- 在if条件下,右或左改变值的相等性检查是否有任何区别
- C++代码在 for 循环的条件下给出运行时错误,而如果它被具有相同意义的代码替换,则编译正确
- C++:如何在不将命令传递给 shell 的情况下执行文件?
- 在 constexpr-if 条件下比较 constexpr 函数参数会导致错误
- 轮班操作在条件下使用的说明
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- 在不同条件下无法访问我的向量变量
- 字符在循环条件下执行
- 在什么条件下,数据库在从 cpp 执行选择查询时不会关闭游标
- C++在两个不同的条件下执行/while循环