Другие языки программирования и технологии

cin.getline() работает не так как ожидается. Код ниже.

Beowulf_84
Beowulf_84
8 214
Зачем вы издеваетесь!?
char a[4];

cin.getline(a, 4); //в любом случае остановит, если будет нажата клавиша интер
cout << a << endl; //зачем вообще цикл создавать?

system("pause");

А если пройтись по вашему коду, то:
for(int i = 0; i != '\n'; i++) У вас переменная i типа int. И вы ее сравниваете с символом зачем то... И естественно что цикл будет выполняться пока переменная не станет равной символу. Но каким образом переменная относится к строке? Никаким! Зачем тогда ее проверять на признак перехода на другую строку? Проверять на переход тогда нужно саму строку, а не переменную a[i] != '\n'. И даже в таком случае будет нарушена логика работы так как getline в конец строки запишет не переход на другую строку '\n', а признак конца строки '\0'. Который кстати является нулем, и можно просто проверять на ноль.
https://pastebin.com/ZvJgRW6Z Вот пример. Тут в проверке цикла используется a[i] трактуется если в a[i] не ноль. Для этого нужно знать что любое не нулевое число считается true. А как мной было сказано выше, признак конца строки равен нулю.
АШ
Алексей Шаров
15 408
Лучший ответ
Beowulf_84 да там не переменная а a[i], описка. То есть с помощью нуля можно проверять? Я это делал, чтобы разобраться как все это работает. Потому что при решении задачи у меня возникли трудности. Надо было отсортировать строки по алфавиту, по первой букве. И для этого я создал массив символов, строку. А при помощи символа \n хотел это строку разбить на несколько строк.
1. Разделитель извлекается из потока, но не сохраняется. Искать его там бессмысленно.
2. Условие цикла у тебя не по содержимому массива, а по переменной цикла. Собственно, пока i не равно '\n' цикл выполняется.
Beowulf_84 Да, это описка. Но какое тогда условие задать, если \n не сохраняется в потоке?
i != '\n'. Т. е. цикл от нуля до значения символа '\n', у которое, кажется, 10. Вот и выводится 10 символов.
Faruh Aripjanov
Faruh Aripjanov
5 197
Beowulf_84 ну, от нулю до \n. А \n(перевод строки) идет после буквы e. если это не так работает, то как можно проверить на конец строки?