Если я введу 12345 в arr2, почему программа пропустит cin.getline(arr3,6,'#') и просто завершит работу?
#include <iostream>
#include <string>
using namespace std;
int main() {
string text;
char arr2[10];
char arr3[6];
cout << "enter value" <<endl;
getline(cin,text);
cin.getline(arr2,5,'#');
cin.getline(arr3,6,'#');
cout << "results : " << endl;
cout << " arr1 is : " << text << endl;
cout <<" arr2 is : " << arr2 << endl;
cout <<" arr3 is : " << arr3 ;
return 0 ;
}
пример исполнения:
enter value
mo
12345
results :
arr1 is : mo
arr2 is : 1234
arr3 is :
Process finished with exit code 0`
А где здесь обр1?





последний параметр в cin.getline() указывает на то, что ввод завершен, т.е. разделитель. Замените строки кодом, который нужно исправить.
cin.getline(arr1,10,'\n');
cin.getline(arr2,10,'\n');
cin.getline(arr3,6,'\n');
Синтаксис: cin.getline(your_array, max_characters, delimiter);
\n означает разрыв строки (в случае этого кода это означает нажатие ENTER)
Не забудьте объявить arr1, так как его объявление отсутствует в вашем коде...
Если я введу от
12345доarr2, почему программа пропуститcin.getline(arr3,6,'#')и просто закончить?
Строка cin.getline(arr2,5,'#'); говорит, что arr2 — это указатель на массив из 5 символов. Этот размер включает терминатор '\0', необходимый для правильной строки в стиле C.
Таким образом, он может прочитать только 4 символа из ввода, а затем добавить терминатор. Когда он обнаруживает более 4 символов до конца строки, это ошибка ввода.
Таким образом, поток устанавливает свое fail()-состояние и больше ничего не читает, пока не будет устранено состояние ошибки.
Ввод в arr3 пропускается, поскольку поток уже находится в состоянии ошибки.
И какого результата вы ожидаете?