Я хочу использовать некоторое время l oop, чтобы неоднократно запрашивать у пользователя строку ввода с помощью 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
, а на следующем l oop он делает паузу для следующей строки ввода, как и ожидалось.
Если пользователь вводит abcd
, то arr
по-прежнему содержит a
, b
, c
, \0
, но при следующем l oop первый элемент a
изменяется на \0
и программа никогда больше не делает паузу для следующей строки ввода. Он просто печатает «Пожалуйста, введите 3 символа:» снова и снова. Почему? Как я могу заставить его делать паузу каждый раз, независимо от ввода?
решено
Спасибо Олафу за указание на то, что мне нужно сбросить бит ошибки.
#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');
}
}
}