【发布时间】:2020-01-26 13:00:21
【问题描述】:
我想使用 while 循环反复询问用户输入一行 cin.getline() 并将输入存储为 C 字符串。
#include <iostream>
int main()
{
const int N = 3;
char arr[N + 1] = {};
while (true)
{
std::cout << "Please enter " << N << " characters: ";
std::cin.getline(arr, N + 1, '\n');
}
}
如果用户键入abc,则arr 包含a、b、c、\0,并且在下一个循环中,它会按预期暂停下一行输入。
如果用户键入abcd,则arr 仍包含a、b、c、\0,但在下一个循环中,第一个元素a 更改为\0 和程序再也不会为下一行输入暂停。它只是一遍又一遍地打印出“请输入 3 个字符:”。为什么?无论输入如何,我怎样才能让它每次都暂停?
已解决
感谢 Olaf 指出我需要重置故障位。
#include <iostream>
#include <limits>
using namespace std;
int main()
{
const int N = 3;
char arr[N + 1] = {'\0'};
while (true)
{
cout << "Please enter " << N << " characters: ";
cin.getline(arr, N + 1, '\n');
if (cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
}
}
【问题讨论】: