Some issues, such as leading whitespace and trailing characters that cannot be part of a number, were not handled in Read an Integer from the User, Part 1. Here such issues receive lip service.
Read an Integer from the User, Part 2
#include <stdio.h>
#include <ctype.h>
int mygeti(int *result)
{
char c, buff [ 13 ]; /* signed 32-bit value, extra room for '\n' and '\0' */
return fgets(buff, sizeof buff, stdin) && !isspace(*buff) &&
sscanf(buff, "%d%c", result, &c) == 2 && (c == '\n' || c == '\0');
}
int main(void)
{
int value;
do {
fputs("Enter an integer: ", stdout);
fflush(stdout);
} while ( !mygeti(&value) );
printf("value = %d\n", value);
return 0;
}
/* my output
Enter an integer: one
Enter an integer:
Enter an integer: f123
Enter an integer: 123f
Enter an integer: 123
Enter an integer: 123
Enter an integer: 1.23
Enter an integer: -42
value = -42
*/
/* note: this line in the above has a space character following the 123
Enter an integer: 123
*/
drxs33 0 Newbie Poster
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.