Проверка принадлежности аргумента к беззнаковому целому 32-битному числу

Программа получает один обязательный аргумент командной строки - беззнаковое целое 32-битное число и должна сохранить его в переменной. Как проверить, что ввели число в нужном формате?


Ответы (1 шт):

Автор решения: AlexGlebe

Считываете аргумент как число, печатаете в строку и проверяете равенство.

// gcc -Wall -Wextra -Wpedantic -std=c11 scanfu32.c -o scanfu32
# include <stdio.h>
# include <stdint.h>
# include <string.h>

int main  ( int n , char * * a ) {
  if ( n < 2 )
    return 0 ;
  uint32_t u ;
  sscanf ( a [ 1 ] , "%u" , & u ) ;
  char stro  [ 12 ] ;
  sprintf ( stro , "%u", u ) ;
  if  ( strcmp  ( stro  , a [ 1 ] ) ) {
    printf  ( "number %u is wrong\n" , u ) ;
    return 1 ; }
  printf  ( "number %u is valid\n" , u ) ; }

проверка :

$ ./scanfu32 456789456
number 456789456 is valid
$ ./scanfu32 4567894568
number 272927272 is wrong
$ ./scanfu32 -1
number 4294967295 is wrong
→ Ссылка