使用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不适合错误检查。 请改用strtolstrtoul

 #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; } }