fork(2) download
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <stdlib.h>
  4. #include <errno.h>
  5.  
  6. #define countof(array) (sizeof(array) / sizeof((array)[0]))
  7.  
  8. int main(void)
  9. {
  10. while (1)
  11. {
  12. printf("Please input a number (or just press ENTER to exit): ");
  13.  
  14. char buffer[32];
  15. if (!fgets(buffer, countof(buffer), stdin) || *buffer == '\n' || *buffer == '\0')
  16. {
  17. printf("Exiting...");
  18. break;
  19. }
  20.  
  21. char *endptr;
  22. errno = 0;
  23. long number = strtol(buffer, &endptr, 10);
  24. if (endptr == buffer)
  25. {
  26. printf("This does not look like a number.\n");
  27. }
  28. else if (*endptr != '\0' && *endptr != '\n')
  29. {
  30. printf("There is some trash after the number %ld.\n", number);
  31. }
  32. else
  33. {
  34. printf("Got valid number %ld%s.\n",
  35. number, (errno == ERANGE) ? ", but it was too big" : "");
  36. }
  37. }
  38. }
  39.  
Success #stdin #stdout 0s 2172KB
stdin
1
123пыщьпыщь
попячся
100500
100000000000000000000000000000
stdout
Please input a number (or just press ENTER to exit): Got valid number 1.
Please input a number (or just press ENTER to exit): There is some trash after the number 123.
Please input a number (or just press ENTER to exit): This does not look like a number.
Please input a number (or just press ENTER to exit): Got valid number 100500.
Please input a number (or just press ENTER to exit): Got valid number 2147483647, but it was too big.
Please input a number (or just press ENTER to exit): Exiting...