Portál AbcLinuxu, 1. prosince 2025 16:41
char *endptr = num;
errno = 0;
strtol(num, &endptr);
if (errno != 0) {
// ERANGE
// neni int, resp mimo rozsah
}
if (num == endptr) {
// no characters consumed
// neni int
}
if (*endptr != 0) {
// trailing data
// neni int
}
getline .. ak pracujes na UX, mozes pouzit aj napr:
#include <stdio.h>
#define BUFSZ 1024
#define MIN_INT 2
#define MAX_INT 12
int main()
{
char buf[BUFSZ+1];
int a, fetch = 1;
/* set a to out of range */
a = ((MIN_INT)-1);
while (fetch) {
fprintf (stdout, "?: ");
/* get line and format */
fgets((char*)&buf, BUFSZ, stdin);
sscanf (buf, "%d", &a);
/* check */
if ( (a >= MIN_INT) && (a <= MAX_INT) ) {
fetch = 0;
}
else {
fprintf (stderr, "error: integer out of range (<%d,%d>)\n", MIN_INT, MAX_INT);
}
}
fprintf (stdout, "your integer: %d\n", a);
return 0;
}
pre "cistotu" kodu by som ten buf urobil dynamicky a oplatilo by sa chytit aj trapy na ^c, pripadne spravit mechanizmus na vyskocenie z nacitania (t.j. ukoncit program ak uzivatel nechce zadavat dalej cisla)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.