Проверка принадлежности аргумента к беззнаковому целому 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