提示再次运行程序:修复他们是否输入了无效语句
Prompting to run the program again: fixing if they put an invalid statement in
早上!
我的问题:我在程序中声明输入 Y 表示是,输入 N 表示否。如果用户输入是、否或随机字符串,它将说这是一个无效的输入并再次询问。但是假设用户输入"是",它将输出无效语句三次。我该如何解决这个问题?
我还需要对布尔值做一些事情,因为它没有任何用处,因为如果他们说 n,我会中断循环,但没关系。
这是我的代码片段:
bool done = true;
string ans;
try {
coeff input = readCoeffs();
results result = equSolver(input);
outResults(input, result);
while (done == true) {
cout << "Would you like to run the program again (Y to run again, N to close)? ";
cin >> ans;
if (ans == "Y" || ans == "y") {
coeff input = readCoeffs();
results result = equSolver(input);
outResults(input, result);
}
else if (ans == "N" || ans == "n") break;
else cout << "Invalid input. n";
}
}
catch (const char* msg) {
cerr << msg << endl;
}
它应该是
while(done == false)
完成应初始化为 false,并在循环中,当它们输入 N 或 n 时将 done 设置为 true。 这在某种程度上是一个风格问题,但通常最好避免休息,除非有很好的理由。
对于无效输入问题,您正在使用
cin >> ans;
这是由空格打破的,所以在"l m n o p"中将使程序说两次"无效输入",然后退出。 如果您想按行处理,请考虑使用 getline。
答案很简单。
1.
您可以使用while(true)
并摆脱done
标志。 或者不使用break;
,翻转done
标志。(顺便说一句,我认为您要么错误地命名了变量,要么翻转了布尔值......它仍然有效,但在语义上毫无意义。
阿拉伯数字。
cin
只读取下一个空格,可以是空格。如果要阅读整行,则需要使用getline
。所以而不是
cin >> ans;
用
getline(cin, ans);
编辑:我修复了使用哪个getline
。现在应该是正确的。
我想出的两种可能性:
- 使用
getline(cin, ans)
- 将读取的字符数限制设置如下:
char input[100];
cin.getline(input,100);
相关文章:
- 检查输入是否不是整数或数字
- 使用std::map是否应该是确定性的
- 在c++中,如何检查一个数组的元素是否也是另一个数组中的元素
- 对象地址是否保证是其类型对齐的倍数
- boost_asio_handler_invoke_helpers::invoke 是否仍然是在 boost asio
- 是否都是隐式内联的 constexpr 变量
- 是转发参考是否仍然是RVALUE参考
- 是否应该是提到的类的 12 大小?
- 关键部分或静音是否真的是成员变量,或者何时应成为成员变量
- 模板参数是否可以是引用类型?
- "optimized out"值是否应该是随机的?
- 如何创建一个数组,使用户知道他们是越野的
- 不可变的 lambda 函数:复制捕获的变量是否允许是 const
- 如何检查向量的第一个元素是否<string>是引号C++
- 重载二元运算符的右操作数是否可以是基本类型的对象
- 像std::queue这样的c++标准库容器是否保证是可重入的
- "size_t"是否始终是"vector<int>::size_type"或任何其他容器类型的别名?
- 折叠表达式的值类别是否始终是 prvalue?
- 我可以检查给定的数字是否可以是具有n个术语的任何算术进程的总和
- 如何检查操作系统是否至少是Windows XP SP3