187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
1

scanf и перевод каретки

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

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

Откуда, как и почему?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2012, 13:29
Ответы с готовыми решениями:

Перевод каретки и ввод данных в консоли
Хотелось бы ввести данные в две строки за один раз... В простейшем случае пример выглядит так: ...

Перевод каретки и ввод данных в консоли
Хотелось бы ввести данные в две строки за один раз... В простейшем случае пример выглядит так: ...

Перевод каретки
Подскажите как перевести каретку в текстовой переменной Нашел что вроде комбинация $_, при чем в...

Перевод каретки
Всем привет! Очередной вредный пользователь поставил очередную задачу.... Суть вот какая... есть...

4
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
23.10.2012, 15:16 2
Не знаю, как у вас, но у меня всё "работает неправильно" и с %d. Вводить можно не любое число, а вообще хоть что-нибудь, что не пробел.

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

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

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

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

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

Добавлено через 15 часов 57 минут
up-to-date
0
24.10.2012, 11:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2012, 11:55
Помогаю со студенческими работами здесь

Перевод каретки
доброй ночи. Помогите, плиз, очень срочно. Пишу текстовый редактор.Вывод текста идет в дочернем...

Перевод каретки на новую строку
Решаю задачу на тимусе №1601. Все работает, как нужно, но есть проблемы с переводом каретки на...

Перевод каретки на новую строку
С помощью какой функции каретка переводится на новую стоку?

Перевод каретки в конец строки
В интернете полно примеров как перевести каретку в начало строки или на новую строчку, а как...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru