Получение многострочного ввода предложений в c ++ - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь взять несколько строк строкового ввода (может содержать пробелы) в c ++, используя двумерный массив символов, но цикл завершается без ввода в коде n = 1:

Когда n = 2, требуется только один ввод, а когда я пытаюсь распечатать ввод [0], он печатает пустой. Но для Кут <

char input[100][100];
int n,i;
cout<<"Enter no of lines : ";
cin>>n;
cout<<"Enter "<<n<<" sentences : "<<endl;
for(i=0;i<n;i++)
    cin.getline(input[i],100);

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Это распространенная проблема при смешивании форматированного и неформатированного ввода.После форматированного ввода внутренний буфер располагается перед первым пустым символом и перед \n.Пуленепробиваемый способ - всегда использовать getline, а затем сканировать первую строку, чтобы извлечь количество строк.Но для такого простого случая достаточно использовать пустышку getline после считывания номера строки, чтобы пропустить конец строки:

char input[100][100];
int n,i;
cout<<"Enter no of lines : ";
cin>>n;
cin.getline(input[0], 100);   // skip the end of line
cout<<"Enter "<<n<<" sentences : "<<endl;
for(i=0;i<n;i++)
    cin.getline(input[i],100);

Но:

  • Вы всегда должны проверять cin после чтения (что если пользователь ошибочно вводит e вместо 4?)
  • , вам следует избегать char arrays и всегда использовать string в C ++ (проще, чище, меньше ошибоксклонный)
0 голосов
/ 19 апреля 2019

Когда вы вводите количество строк (скажем, 4), вы нажимаете 4, а затем enter. Он сохраняется как 4\n в стандартном вводе. Когда вы читаете, используя cin.getline(), вы читаете \n. Вам придется использовать cin.ignore, чтобы игнорировать существующий буфер в stdin. Однако лучше использовать оператор >>, поскольку он обрабатывает переводы строки. Для многострочного ввода вы можете ввести третий параметр в getline(): разделитель, указывающий, что обозначает конец вашего ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...