Portál AbcLinuxu, 7. června 2025 16:23
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.