【发布时间】:2020-12-10 21:39:10
【问题描述】:
我的任务是创建一个对数字向量进行一些计算的程序。向量中必须至少包含 1 个数字,如果没有,我必须抛出异常并重试。这里有一个视频示例代码应该如何工作:https://asciinema.org/a/283343
我猜测 EOF 正在使用 CTRL+D 发出信号,这就是引发异常的原因。 如果他们使用 Enter(新行),它会留下一个空行。 但就我而言,在我按下 CTRL+D 后,我的程序只是在无限循环中运行,因为尽管我使用了 cin.clear(),但标准输入仍处于失败状态。
是否有另一个类似于 CTRL+D 的快捷方式可以用于此目的,或者有没有办法重新打开流,或重新启动整个应用程序。
当我使用 CTRL+Z 时,该程序在 Windows 上运行良好,但在 Linux 上我无法让它正常工作。
示例代码如下:
#include<iostream>
#include<vector>
void enter_elements(std::vector<double>& input_list){
double x;
std::cout << "Enter numbers: " << std::endl;
while(std::cin >> x){
input_list.push_back(x);
}
if(input_list.empty()){
throw std::string("You must enter at least 1 number!");
}
}
int main(){
std::vector<double> input_list;
try {
enter_elements(input_list);
} catch (const std::string& e) {
std::cout << "Error: " << e << std::endl;
std::cin.clear();
enter_elements(input_list);
}
return 0;
}
谁能帮我解决这个问题或建议我可以在哪里阅读更多相关信息?
【问题讨论】:
-
我想到了两件事:首先,这似乎不是一个很好的异常用例;第二件事是您可能希望使用特殊的哨兵输入来标记输入的结尾而不是文件结尾。
-
哦,第三件事:您可能想在循环中调用
enter_elements,直到向量非空。现在你只尝试了两次。 -
我正在考虑调用 main() 而不是 enter_elements(list) 这样我就可以基本上“重新启动”我的程序了。
-
哦,你不能那样做。在 C++ 中禁止自己调用
main,这会导致未定义的行为。如果你想要一个循环,请使用一个实际的循环。