C++ C++;:处理输入 chard; 做 { cout
循环在d的值为“1”或“2”或“3”时执行。要执行循环直到它接受有效输入,只需更改如下代码中的条件C++ C++;:处理输入 chard; 做 { cout,c++,C++,循环在d的值为“1”或“2”或“3”时执行。要执行循环直到它接受有效输入,只需更改如下代码中的条件 char d; do { cout<<"1.Easy\n"; cout<<"2.Medium\n"; cout<<"3.Hard\n"; cout<<"Choose your difficulty:"; cin>>d; if (d=='1') { //function
char d;
do
{
cout<<"1.Easy\n";
cout<<"2.Medium\n";
cout<<"3.Hard\n";
cout<<"Choose your difficulty:";
cin>>d;
if (d=='1')
{
//function call
break;
}
else
if (d=='2')
{
//function call
break;
}
else
if (d=='3')
{
//function call
break;
}
else
cout<<"Invalid Input!\n";
}while (d=='1' || d=='2' || d=='3') ;
chard;
做
{
cout仅当d==“1”、“2”或“3”时才执行循环。您需要检查以确保它不是这些字符之一。这可以通过对代码进行以下调整来完成:
char d;
do
{
cout<<"1.Easy\n";
cout<<"2.Medium\n";
cout<<"3.Hard\n";
cout<<"Choose your difficulty:";
cin>>d;
if (d=='1')
{
a.setdifficulty("Easy");
break;
}
else
if (d=='2')
{
a.setdifficulty("Medium");
break;
}
else
if (d=='3')
{
a.setdifficulty("Hard");
break;
}
else
cout<<"Invalid Input!\n";
}while (d!='1' && d!='2' && d!='3') ;
希望这会有所帮助。这是您想要的代码……您的代码将始终执行一次……对于输入1、2、3,您会中断外观,如果输出无效,则在while循环中您的条件不匹配
char d;
do
{
..........
}while ( ! (d=='1' || d=='2' || d=='3') ) ;
do
{
cout如果在每个有效情况下都有中断
,则无需检查while
条件中的d
值:
do
{
cout<<"1.Easy\n";
cout<<"2.Medium\n";
cout<<"3.Hard\n";
cout<<"Choose your difficulty:";
cin>>d;
if (d=='1')
{
cout<<"Easy";
break;
}
else
if (d=='2')
{
cout<<"DIFF";
break;
}
else
if (d=='3')
{
cout<<"Hard";
break;
}
else
cout<<"Invalid Input!\n";
}while (d!='1' || d!='2' || d!='3') ;
while(true){
如果这应该一直运行到d
为1、2或3,那么while条件不应该包含在not运算符中吗?while(!(d='1'| d='2'| d='3'))
?抛开所有其他问题不谈,该程序可能在标准输出刷新之前退出。我在MSVC 2013中对此进行了测试,并获得了预期的输出。除了while()中的条件之外
,发布的代码在我看来还行。好吧,这肯定会重新开启无刷新理论。看起来你还有另一个问题需要问。拿出(为我们)不可编译的a.setconstitution
垃圾,看看它是否仍然爆炸。下次,发布(为我们)编译的代码并演示了问题。我们不知道a
是什么,它来自哪里,设置难度是什么,等等。如果要重写while条件,可以编写一个如下所述的条件:while(d!=“1”&&d!=“2”&&d!=“3”);
就是这样一种可能性。while条件将始终为true。这是由于break
语句才起作用的。只需将该条件替换为true
。正确的逻辑,但OP的break语句使其变得毫无意义。@user4581301非常正确,但我发现通常最好向某人展示如何修复其逻辑;正如ed开始对问题应用补丁,并将while(true)与break语句一起使用。(别误会,我喜欢break语句,并且一直使用它们。但是在这种情况下,它们不是必需的。正确的逻辑是更优雅的解决方案。)你知道吗?我同意你的看法。就我个人而言,我会用一个开关来替换ifs,这会把破坏循环的中断语句弄得一团糟。@user4581301开关在我看来在这种情况下也会更出色。然而,OP只是要求修复结束逻辑,而不是评估逻辑。
while (true) {
cout << "1.Easy\n";
cout << "2.Medium\n";
cout << "3.Hard\n";
cout << "Choose your difficulty:";
cin >> d;
if (d == '1') {
a.setdifficulty("Easy");
break;
}
else if (d == '2') {
a.setdifficulty("Medium");
break;
}
else if (d == '3') {
a.setdifficulty("Hard");
break;
}
else
cout << "Invalid Input!\n";
}