Можно ли установить ограничение на ввод через макроподстановку scanf() - C (СИ)
Формулировка задачи:
Собственно есть такая строка:
Но она не так универсальна с ограничением на длину как fgets():
Хотелось бы через макроподстановку или через любую замену сделать вот так, т.е. вместо 24 написать lmas-1:
scanf("%24[^\r\n]",scan.model);
fgets(scan.model,lmas,stdin);
#define lmas 25 scanf("%lmas-1[^\r\n]",scan.model);//но оно не работает =(
Решение задачи: «Можно ли установить ограничение на ввод через макроподстановку scanf()»
textual
Листинг программы
#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; }
Объяснение кода листинга программы
В этом коде:
- Объявлены две переменные типа char: buf и smax. Первая используется для чтения строки, вторая — для формирования строки-шаблона, ограничивающей ввод.
- В строку smax записывается шаблон, представляющий собой строку, в которую затем будет подставлен код, ограничивающий ввод.
- В переменную buf считывается строка из стандартного ввода.
- Ввод ограничивается с помощью scanf(smax, &buf). Здесь scanf считывает строку, не превышающую 25 символов (включая нулевой символ).
- Ввод ограничивается с помощью fflush(stdin).
- Выводится считанная строка.
- Ожидается нажатие любой клавиши.
- Возвращается 0, заканчивая работу программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д