Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Откуда, как и почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2012, 13:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос scanf и перевод каретки (C++):

Перевод каретки и ввод данных в консоли - C++
Хотелось бы ввести данные в две строки за один раз... В простейшем случае пример выглядит так: #include <iostream> #include <cstdio>...

Перевод каретки и ввод данных в консоли - C++
Хотелось бы ввести данные в две строки за один раз... В простейшем случае пример выглядит так: #include <iostream> #include <cstdio>...

Насчёт каретки ) - C++
Всем привет )).Что бы я ни делал с кареткой,функции всегда возвращают нули =_=.Решил поэксперементировать с блокнотом: HWND f; ...

Возврат каретки консоли! - C++
Доброе время суток! Вопрос который мне не дает покоя уже 2й месяц! И так у нас есть управляющие символы: - \n (новая строка) -...

Fstream перемещение каретки - C++
Здравствуйте, не могу разобраться с классом fstream. Есть текстовый файл: 0 какие-то данные какие-то данные какие-то данные ...

Перемещение каретки в консоли - C++
Как это работает,как правильно написать это,я нашел кучу разных статей на эту тему ,все понял,но не нашел ни одной где перемещать каретку...

4
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 42
Регистрация: 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
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.10.2012, 15:30  [ТС] #3
~OhMyGodSoLong~, у меня, пока что, не вызывает ошибок такой хак :
C++
1
scanf("%u\0", &uint);
Но сам факт того, что с %d работает \n, а с %u \0 меня как-то настораживает :<

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

Разве тот хак не эквивалентен просто scanf("%u", &uint)?
1
nexen
187 / 180 / 3
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2012, 11:55
Привет! Вот еще темы с ответами:

Что такое возврат каретки? - C++
\r - что делает этот управляющий символ, и чем он отличается от \n?

Перемещение каретки в указанные координаты - C++
Доброе время суток, Подскажите как сдвинуть каретку в консоле на заданные координаты

Вывод в консоль и возврат каретки - C++
Вывожу в цикле в консольное приложение по ходу обработки данных массива: cout &lt;&lt; &quot;Обработано строк:&quot; &lt;&lt; i &lt;&lt; &quot;\r&quot;; При таком выводе...

Печать символа без переноса каретки - C++
Как напечатать символ чтобы каретка не перешла на следующий символ?


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

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

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