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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

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

23.10.2012, 13:29. Просмотров 2298. Ответов 4
Метки нет (Все метки)

Конструкция вида
C++
1
scanf("%d\n", &uintgr);
позволительна и перевод каретки уйдет.
Однако
C++
1
scanf("%u\n", &uintgr);
не уберет каретку, а сделает ещё хуже. Нужно будет ввести два числа. Второе останется в буфере.

Откуда, как и почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2012, 13:29     scanf и перевод каретки
Посмотрите здесь:

Что такое возврат каретки? C++
C++ Насчёт каретки )
C++ scanf в C
C++ Перевод каретки и ввод данных в консоли
C++ Перевод каретки и ввод данных в консоли
Перемещение каретки в указанные координаты C++
C++ Fstream перемещение каретки
Как считать в цикле файл до символа перевода каретки? C++
Вывод в консоль и возврат каретки C++
Возврат каретки консоли! C++
C++ Перемещение каретки мыши по координатам в Linux
C++ Перемещение каретки в консоли

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 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
~ Эврика! ~
1243 / 992 / 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 и перевод каретки
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru