101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
1

Можно ли установить ограничение на ввод через макроподстановку scanf()

15.10.2011, 23:35. Показов 1361. Ответов 8
Метки нет (Все метки)

Собственно есть такая строка:
C
1
scanf("%24[^\r\n]",scan.model);
Но она не так универсальна с ограничением на длину как fgets():
C
1
fgets(scan.model,lmas,stdin);
Хотелось бы через макроподстановку или через любую замену сделать вот так, т.е. вместо 24 написать lmas-1:
C
1
2
#define lmas 25
scanf("%lmas-1[^\r\n]",scan.model);//но оно не работает =(
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2011, 23:35
Ответы с готовыми решениями:

Ограничение на ввод символов scanf() и cin
Здравствуйте. Возможно ли ограничить ввод символов после вызова scanf() или cin? Нужно чтоб...

Ввод/вывод через printf() и scanf()
Как правильно заменить вывод и ввод с cout/cin на printf() и scanf()? #include <string.h>...

Установить ограничение на ввод количества дней в месяце
В проге нужно сделать ограничение дней в месяце чтоб нельзя например было ввести в феврале (2)...

Ввод строки в структуре, заданной как char *str через scanf (ПОМОЩЬ)
struct {char *str;} A; scanf("%s", &A.str); Аварийное завершение программы после ввода. Если...

8
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
15.10.2011, 23:45 2
sprintf / snprintf в помощь
0
бжни
2473 / 1682 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
15.10.2011, 23:55 3
C
1
2
#define READ_STRING(arg) "%" #arg "[^\r\n]"
scanf(READ_STRING(25),scan.model);
Добавлено через 4 минуты
ну конечно строка статическая будет - переменную пробовать туда совать не стоит
2
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
15.10.2011, 23:57  [ТС] 4
Цитата Сообщение от alex_x_x Посмотреть сообщение
#define READ_STRING(arg) "%" #arg "[^\r\n]"
это подстановка в подстановке или как-то поподробнее, пожалуйста...
0
бжни
2473 / 1682 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
16.10.2011, 00:05 5
#define READ_STRING(arg) - макрос с аргументом
пускай у нас READ_STRING(25)
тогда #arg -> #25 - > "25"
а по заветам си строчные литералы идущие подряд склеиваются
"%l" #25 "[^\r\n]" -> "%l" "25" "[^\r\n]" -> "%l25[^\r\n]"
там l в макросе конечно забыл
#define READ_STRING(arg) "%l" #arg "[^\r\n]"
0
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
16.10.2011, 00:13  [ТС] 6
alex_x_x, я сделал так как вы показали:
C
1
scanf(READ_STRING(25),scan.model);
где же менять значение? в скобках этих READ_STRING(25)? тогда это тоже самое, что было у меня, я пробовал вот так, но не работает, или я что-то не понял..:
C
1
scanf(READ_STRING(lmas),scan.model);
мне нужно менять вверху, а не в коде искать...
0
933 / 758 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
16.10.2011, 00:18 7
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int  main(void) {
   char buf[25];
   char smax[16];
   int lmas = 25;
 
   sprintf(smax, "%%%d[^\r\n]", lmas-1);
   scanf(smax, &buf);
 
   fflush(stdin);
   puts(buf);
 
   getchar();
   return 0;
}
1
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
16.10.2011, 00:37  [ТС] 8
Цитата Сообщение от xAtom Посмотреть сообщение
%%%d
что это означает, подскажите пожалуйста.
0
Каратель
Эксперт С++
6601 / 4020 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
16.10.2011, 01:24 9
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от CVB Посмотреть сообщение
%%
экранированый знак процента
Цитата Сообщение от xAtom Посмотреть сообщение
%d
знаковое целое
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2011, 01:24

Ввод данных через scanf без перехода на новую строку, используя пробел
Нужно ввести двумерный массив так, чтобы каждый символ вводился на этой же строке нажатием клавиши...

Установить ограничение на ввод данных (дата, диапазон которой 15-120 лет по отношению к нынешней дате)
Помогите разобраться, пожалуйста. У меня есть свойство. Мне нужно установить ограничение на ввод...

Можно ли через scanf считать число, записанное в двоичной системе счисления
Добрый день уважаемые обитатели. Вопрос заключается в следующем: Можно ли через scanf считать...

Ограничение на ввод символов (разрешить ввод только цифр)
Всем доброго времени суток! Я начал изучать С++ и у меня возник такой вопрос: Как ограничить...

Можно ли любую Windows установить через флешку ?
кто знает скажите можно любой виндус установить через флешку ? особенно интересует хр

Непоследовательный ввод scanf
Всем привет. Имеюм код вроде printf(&quot;Введите первую переменную&quot;); scanf(&quot;%d&quot;, number1);...


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

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

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