作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试验证不是整数 1、2 或 3 的输入。我正在使用 do/while 循环,但它不起作用,只是不断重复。怎么了?
#include <iostream>
#include <string>
using namespace std;
string decisionThing(int);
int main()
{
int response;
cout << "Enter the section you are in in\n";
cin >> response;
do
{
cout << "Are you in section 1, 2, or 3?";
cin >> response;
} while (response != 1 || response != 2 || response != 3);
cout << decisionThing(response) << "\n";
}
string decisionThing(int response)
{
string date;
switch (response)
{
case 1:
date = "The test will be held on the 5th.\n";
return date;
break;
case 2:
date = "The test will be held on the 6th.\n";
return date;
break;
case 3:
date = "The test will be held on the 9th.\n";
return date;
break;
}
}
它应该执行 do/while 循环为真(用户输入一些输入,如 155
或 “zebras”
)。
最佳答案
问题是您的 while 循环总是 返回 true。当您应该使用 &&
时,您却在使用 ||
。任何输入要么是not 1
,要么是not 2
,要么是not 3
。
将您的代码更改为此,它将解决问题。
do {
cout << "Are you in section 1, 2, or 3?";
cin >> response;
} while (response != 1 && response != 2 && response != 3);
至于你得到的错误,可能是你的 decisionThing
在现实生活中不会得到一个不是 1
的数字, 2
或 3
但编译器不知道。如果该方法得到的数字不满足这两种情况,应该怎么办?它没有定义。因此,我们有一条路径可以让此代码在指定返回字符串的函数中不返回任何内容。您可以返回空字符串或抛出异常或处理 default
情况,如下所示:
string decisionThing(int response)
{
string date;
switch (response)
{
case 1:
date = "The test will be held on the 5th.\n";
return date;
case 2:
date = "The test will be held on the 6th.\n";
return date;
case 3:
date = "The test will be held on the 9th.\n";
return date;
default:
date = "Wow, this is really unexpected, I guess nothing?\n";
return date;
}
}
顺便说一句,当您有return
时,您不需要break
。该函数将立即返回,因此之后的任何操作都不会被执行。
关于c++ - "Not all controlpaths return a value"/"control may reach end of non void function"使用 while 循环验证时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56013684/
我是一名优秀的程序员,十分优秀!