
Другие языки программирования и технологии
cin.getline() работает не так как ожидается. Код ниже.

Зачем вы издеваетесь!?
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. А как мной было сказано выше, признак конца строки равен нулю.
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. А как мной было сказано выше, признак конца строки равен нулю.
Beowulf_84
да там не переменная а a[i], описка. То есть с помощью нуля можно проверять? Я это делал, чтобы разобраться как все это работает. Потому что при решении задачи у меня возникли трудности. Надо было отсортировать строки по алфавиту, по первой букве. И для этого я создал массив символов, строку. А при помощи символа \n хотел это строку разбить на несколько строк.
1. Разделитель извлекается из потока, но не сохраняется. Искать его там бессмысленно.
2. Условие цикла у тебя не по содержимому массива, а по переменной цикла. Собственно, пока i не равно '\n' цикл выполняется.
2. Условие цикла у тебя не по содержимому массива, а по переменной цикла. Собственно, пока i не равно '\n' цикл выполняется.
Beowulf_84
Да, это описка. Но какое тогда условие задать, если \n не сохраняется в потоке?
i != '\n'. Т. е. цикл от нуля до значения символа '\n', у которое, кажется, 10. Вот и выводится 10 символов.
Beowulf_84
ну, от нулю до \n. А \n(перевод строки) идет после буквы e. если это не так работает, то как можно проверить на конец строки?
Андрей Карев
10-13
Похожие вопросы
- С++ cin cout. Не работает программа.
- Вопрос по основам машинного кода и бинарного кода. Как это работает в своей основе?
- для чего применяется getline?? и что означает inf в проге? name я так понял имя файла а вот что за inf?
- С++: и опять о переполнении при cin
- Почему работает этот код?
- Почему казалось бы простой код не работает в Турбо Паскале?
- Некорректно работает код. (C#)
- Проблема с программой в Pascal ABC,Встречено ';',а ожидалось ':'. Если менять, то вылетает ещё ошибка с if
- Почему не работают операторы cin и cout в visual studio 8.Пример программы дальше
- Почему операторы printf, scanf работают быстрее cin cout в С++??