Форум программистов, компьютерный форум CyberForum.ru

scanf и перевод каретки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.10.2012, 13:29     scanf и перевод каретки #1
Конструкция вида
C++
1
scanf("%d\n", &uintgr);
позволительна и перевод каретки уйдет.
Однако
C++
1
scanf("%u\n", &uintgr);
не уберет каретку, а сделает ещё хуже. Нужно будет ввести два числа. Второе останется в буфере.

Откуда, как и почему?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
23.10.2012, 15:16     scanf и перевод каретки #2
Не знаю, как у вас, но у меня всё "работает неправильно" и с %d. Вводить можно не любое число, а вообще хоть что-нибудь, что не пробел.

scanf() делит всё содержимое строки формата на три класса: спецификаторы формата, пробельные символы и всё остальное. Спецификатор (типа %d) говорит считать из потока указываемые данные. Пробел (' ', '\t', '\r', '\n') означает любое количество любых пробелов. Возможно, нулевое, если это не мешает разобрать строку. Любой другой не пробельный символ означает единственное вхождение этого символа в считываемую строку. Если его там не оказывается, то считанное оставляется в потоке, а scanf() ругается кодом возврата.

Так что игнорить именно переводы строки не получится с помощью scanf(). scanf("%d\n%d", &x, &y); прекрасно переваривает ввод "42 <пробел> 42".
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.10.2012, 15:30  [ТС]     scanf и перевод каретки #3
~OhMyGodSoLong~, у меня, пока что, не вызывает ошибок такой хак :
C++
1
scanf("%u\0", &uint);
Но сам факт того, что с %d работает \n, а с %u \0 меня как-то настораживает :<

То есть вообще невозможно одним сканфом и одной переменной UINT забрать и число, и перевод строки?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
23.10.2012, 16:56     scanf и перевод каретки #4
И двумя. И пятью. Для scanf() \n и пробелы — это тупо разделитель. Он его никак по-другому не умеет трактовать. Разве что когда scanf("%u%c"), но тогда ж что попало можно ввести и надо где-то пристроить этот char.

Разве тот хак не эквивалентен просто scanf("%u", &uint)?
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
24.10.2012, 11:55  [ТС]     scanf и перевод каретки #5
~OhMyGodSoLong~, неа. В отличие от обычного scanf("%u", &uint);, хак с \0 в конце действительно забирает перевод строки, как \n для %d. И вот я даже и не знаю, как это обосновать можно D:

Добавлено через 2 часа 57 минут
up-to-date

Добавлено через 15 часов 57 минут
up-to-date
Yandex
Объявления
24.10.2012, 11:55     scanf и перевод каретки
Ответ Создать тему
Опции темы

Текущее время: 13:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru