使用的atoi整数的输入验证()(Input validation of an Integer us

2019-07-21 01:03发布

#include "stdafx.h"
#include <stdlib.h>

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();
}

上面的代码接受一个字符串的形式的数,并将其转换使用的atoi为整数。 如果用户输入一个十进制数,只有小数点前的位被接受。 此外,如果用户输入一个字母时,它返回0。

现在,我有两个疑问:

ⅰ)我想要的程序以检测是否用户输入与小数点并输出一个错误消息的数目。 我不希望它到小数点前采取的一部分。 我希望它认识到,输入无效。

二)如果的atoi返回0的情况下有字母,我怎么能验证它,因为用户可以输入数字0呢?

谢谢。

Answer 1:

atoi不适于错误检查。 使用strtolstrtoul代替。

#include <errno.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>

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). */
}


Answer 2:

还有就是isdigit功能,可以帮助您检查每个字符:

#include <ctype.h>

/* ... */

for (i=0; buffer[i]; i++) {
        if (!isdigit(buffer[i])) {
            printf("Bad\n");
            break;
        }
}   


文章来源: Input validation of an Integer using atoi()