使用atoi()输入Integer的validation
#include "stdafx.h" #include void main() { char buffer[20]; int num; printf("Please enter a number\n"); fgets(buffer, 20, stdin); num = atoi(buffer); if(num == '\0') { printf("Error Message!"); } else { printf("\n\nThe number entered is %d", num); } getchar(); }
上面的代码接受一个字符串forms的数字,并使用atoi将其转换为整数。 如果用户输入十进制数,则只接受小数点前的位。 此外,如果用户输入字母,则返回0。
现在,我有两个问题:
i)我希望程序检测用户是否输入了带小数点的数字并输出错误信息。 我不希望它在小数点之前取得部分。 我希望它能够识别输入无效。
ii)如果atoi返回0以防有字母,我怎么validation它,因为用户也可以输入数字0?
谢谢。
atoi
不适合错误检查。 请改用strtol
或strtoul
。
#include #include #include #include long int result; char *pend; errno = 0; result = strtol (buffer, &pend, 10); if (result == LONG_MIN && errno != 0) { /* Underflow. */ } if (result == LONG_MAX && errno != 0) { /* Overflow. */ } if (*pend != '\0') { /* Integer followed by some stuff (floating-point number for instance). */ }
有一个isdigit
函数可以帮助您检查每个字符:
#include /* ... */ for (i=0; buffer[i]; i++) { if (!isdigit(buffer[i])) { printf("Bad\n"); break; } }