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

Узнай цену своей работы

Формулировка задачи:

Собственно есть такая строка:
scanf("%24[^\r\n]",scan.model);
Но она не так универсальна с ограничением на длину как fgets():
fgets(scan.model,lmas,stdin);
Хотелось бы через макроподстановку или через любую замену сделать вот так, т.е. вместо 24 написать lmas-1:
#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;
}

Объяснение кода листинга программы

В этом коде:

  1. Объявлены две переменные типа char: buf и smax. Первая используется для чтения строки, вторая — для формирования строки-шаблона, ограничивающей ввод.
  2. В строку smax записывается шаблон, представляющий собой строку, в которую затем будет подставлен код, ограничивающий ввод.
  3. В переменную buf считывается строка из стандартного ввода.
  4. Ввод ограничивается с помощью scanf(smax, &buf). Здесь scanf считывает строку, не превышающую 25 символов (включая нулевой символ).
  5. Ввод ограничивается с помощью fflush(stdin).
  6. Выводится считанная строка.
  7. Ожидается нажатие любой клавиши.
  8. Возвращается 0, заканчивая работу программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы