21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,053
1

Ввод данных через scanf без перехода на новую строку, используя пробел

25.11.2018, 13:49. Показов 10494. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно ввести двумерный массив так, чтобы каждый символ вводился на этой же строке нажатием клавиши "пробел". Это возможно как-то сделать с помощью scanf?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2018, 13:49
Ответы с готовыми решениями:

Ввод данных в одну строку через пробел
Нужно сделать Ввод именно как сказано , то есть в одну строку через пробел.Как реализовать ? У меня...

Как считать строку scanf'ом при этом не переходя на новую строку, т.е. без использования Enter'а
Как считать строку scanf'ом при этом не переходя на новую строку, т.е. без использования Enter'а,...

Ввод с клавиатуры до перехода на новую строку
Добрый день! Столкнулся со следующей проблемой. Мне нужно написать фрагмент программы с вводом...

cin без перехода на новую строку
Как сделать, чтобы после считывания cin курсор не переводился на новую строку, а оставался на...

13
7802 / 6567 / 2987
Регистрация: 14.04.2014
Сообщений: 28,712
25.11.2018, 14:04 2
А в чём проблема-то?
0
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,053
25.11.2018, 15:36  [ТС] 3
nmcf, что вы имеете ввиду?
0
3883 / 2483 / 418
Регистрация: 09.09.2017
Сообщений: 10,925
25.11.2018, 15:47 4
то что для scanf это обычное поведение:
C
1
2
3
4
scanf("%i", &var);
printf("%i\n", var);
scanf("%i", &var);
printf("%i\n", var);
Код
$ ./a.out
1 2
1
2
$
Или вы хотите анализировать значение строки до нажатия enter? Так не получится из-за организации работы с консолью: данные передаются не по одному байту, а сразу блоками, ограниченными обычно переводами строки. Это сделано чтобы можно было редактировать данные перед передачей приложению. Ну и оптимизация, конечно
0
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,053
25.11.2018, 16:09  [ТС] 5
COKPOWEHEU, я хочу передавать значение строки по нажатию на пробел вместо enter (чтобы после ввода значение не переводилось на новую строку). Кроме scanf'а, функций ввода я не изучал, поэтому предпочтительнее будет именно ввод scanf'ом, но без перевода на новую строку после окончания ввода.
0
7802 / 6567 / 2987
Регистрация: 14.04.2014
Сообщений: 28,712
25.11.2018, 16:16 6
Титан_1, тебе же сказали, что Enter должен быть нажат хотя бы один раз после ввода всего.
0
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,053
25.11.2018, 16:51  [ТС] 7
как тогда ввести через scanf значения нескольких переменных так, чтобы каждая выводилась в консоль без перевода на новую строку. ( Сейчас значение переменной после ввода выводится в консоль без операции вывода и с переходом на новую строчку, а мне надо без перехода на новую строчку)
0
3883 / 2483 / 418
Регистрация: 09.09.2017
Сообщений: 10,925
25.11.2018, 19:12 8
Сдается мне, вы пытаетесь решить обычную задачу, подходя с неправильной стороны, откуда и возникают проблемы.
При особом желании вы можете вводить по одному символу и вручную реализовывать readline. Но это довольно сложно. Впрочем, если захотите разобраться в этом подробнее реализовать свой велосипед и правда стоит. Гуглить "неканонический ввод", либо просто искать библиотеки работы с консолью вроде ncurses (она кроссплатформенная если что).
1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,053
25.11.2018, 19:35  [ТС] 9
COKPOWEHEU, Да, вы правы, в задаче не было ничего сказано про визуальное оформление, но мне хочется сделать всё красиво. Я слышал, что это как-то можно реализовать через cin.get, getch и им подобных в несколько строчек, но как именно – я не понял
0
7802 / 6567 / 2987
Регистрация: 14.04.2014
Сообщений: 28,712
25.11.2018, 20:12 10
Ну введи через пробел, скажем, 5 чисел с общим Enter в конце и затем вызови 5 раз scanf().
1
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,053
25.11.2018, 20:48  [ТС] 11
nmcf, Хм, а это работает. Парвда выводимые символы после введенных переходят на новую строку, но да ладно.
0
3883 / 2483 / 418
Регистрация: 09.09.2017
Сообщений: 10,925
26.11.2018, 16:53 12
Цитата Сообщение от Титан_1 Посмотреть сообщение
мне хочется сделать всё красиво.
А может стоит сделать функционально?
Существенный плюс консольных утилит в возможности соединять их в конвейер, когда выходные данные одной утилиты передаются на вход следующей. В таком случае разнообразные интерактивные запросы это скорее вред, чем польза. Сами данные при таком подходе передаются через stdin / stdout, а необязательные параметры и модификаторы - через ключи запуска (одна буква, предваряемая минусом, либо слово, предваряемое двумя минусами для POSIX традиции: -k --key ; либо буква (на счет слов сказать не могу, не интересовался), предваряемая прямым слешом для win32 традиции: /k). Запуск с ключами -h, --help, /h, /? обычно используются для вывода подсказки. Анализировать ключи можно через argc, argv.
Я не знаю, что у вас за программа и будет ли в вашем случае это удобно.
Но добавлю еще: подобный подход (правда, без ключей и с файлами в качестве ввода и вывода) используется на олимпиадах для автоматического тестирования. И там тоже интерактивный ввод-вывод не приветствуется.
0
61 / 5 / 1
Регистрация: 03.06.2013
Сообщений: 354
Записей в блоге: 3
07.01.2020, 14:37 13
Титан_1,

если я правильно тебя понял то
C++
1
char var[]; scanf("%[^\n]", var);
данный скан не будет каждый пробел интерпретировать как перевод строки. и красиво распечатает тебе в одной линии. но уже правда надо из чара в целое перевести обратно или через ASCII коды или atoi() например

а вот кстати мне тоже непонятно почему сканф пробел воспринимает как новую строку ?
0
Неэпический
17871 / 10638 / 2054
Регистрация: 27.09.2012
Сообщений: 26,753
Записей в блоге: 1
07.01.2020, 15:01 14
alexbmd, scanf читает пока не встретит разделитель. Ну или пока ошибка какая не произойдет. Пробел - тоже разделитель.
Титан_1, отключите канонический режим ввода в своей консоли/терминале и обрабатывайте ввод вручную.

Добавлено через 3 минуты
Как принимать литеру забоя (backspace) через getchar()?
0
07.01.2020, 15:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2020, 15:01
Помогаю со студенческими работами здесь

Как вводить переменную без перехода в новую строку?
Как после ввода строки не переходить в новую? Не очень понимаю, есть несколько тем, но там нет...

Как ввести данные без перехода на новую строку?
Собственно вопрос в заголовке. for (int i = 0; i < 4; i++) { for (int j = 0; j < 3; j++) {...

Как сделать запись в файл без перехода на новую строку?
Имеется код: set /P asd= < i.dat echo text,%asd%>i.dat Ну по коду ясно что он открывает файл и в...

Написать приложение, выводящее n строк с переходом и без перехода на новую строку
Написать приложение, выводящее n строк с переходом и без перехода на новую строку. Строки можно...


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

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

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