【发布时间】:2021-03-02 08:39:44
【问题描述】:
我正在尝试将一些数字输入到数组中。 非常简单的任务。
int array[100], n = 0, length = 0;
std::cout << "Input numbers: " << std::endl;
while (std::cin >> n) {
array[length++] = n;
}
我在 CLion 中按shift + F10,试图运行它并
它不会结束一段时间(我连续按了 5 次 Enter),它会一直持续下去。 我在这里做错了吗?
我尝试在每次输入后使用std::cin.ignore()。好像没什么效果。
谢谢!
编辑:当我按下ctrl-D 时它确实成功结束,但我遇到了另一个问题。 (我修改了标题)
我有这个程序:
void read_input(int arr[], int &length) {
int n = 0;
std::cout << "Read input: " << std::endl;
while (std::cin >> n) {
arr[length++] = n;
}
}
int main() {
int array[100], length = 0;
int c = -1;
while (true) {
std::cout << "Menu: (TO DO)\n";
std::cout << "Your option: ";
std::cin >> c;
if (c == 1) {
read_input(array, length);
}
if (c == 0) break;
}
}
会发生什么,我输入选项:
1
Read input:
1
2
3
4
^D
Menu: (TO DO)
Your option:
Read input:
Menu: (TO DO)
Your option:
Read input:
Menu: (TO DO)
Your option:
Read input:
...
基本上,在它进入 read_input() 并给它一些数字之后,我按 ctrl-D 并且它不会再次询问我输入/选项,它只会再次读取1 for std::cin >> c;一次又一次,它将永远持续下去。
【问题讨论】:
-
使用特定于平台的 EOF 键盘快捷键(Linux/macOS 上为
Ctrl-D,Windows 上为Ctrl-Z)。 -
请查看编辑。
-
当您给 EOF 输入时,输入流处于无法再次使用的状态。你需要clear那个状态才能再次使用它。
-
我不知道我做的对不对,但是我把
std::cin.clear();放在了while循环之后read_input()的末尾,这样我就可以让输入再次可用,如果我理解的没错。但是现在,在我按下ctrl-D之后,它就退出了程序(它退出了 while(true) 循环)。 -
您是否也在
ignore()'ingCtrl-D本身,因此它不会在输入缓冲区中逗留?