如何使用fgets和strtol检查输入是否为有效整数?

时间:2019-02-13 20:09:18

标签: c

我尝试过

#define BUF_SIZE 256
char msg[BUF_SIZE];
printf("input? ");

while (fgets(msg,BUF_SIZE,stdin)!=NULL){
    char *next;
    int input = strol(msg, &next,10); //use strol 
    if ((end == msg) || (*end == '\0')){ //check validity here
       printf("invalid\n");
       printf("try again\n"); //type anther value
    else{
       printf("valid\n");
}

我的代码有什么问题?
那是检查整数输入的正确方法吗?

1 个答案:

答案 0 :(得分:0)

错误的测试和函数名称

// if ((end == msg) || (*end == '\0')){ //check validity here
if ((end == msg) || (*end !== '\0')){ //check validity here
  printf("invalid\n");

更好地分配给long还是根本不分配

// int input = strol(msg, &next,10);
long input = strtol(msg, &next,10);
or 
strtol(msg, &next,10);

使用errno也是要检查是否溢出。

errno = 0;
strtol(msg, &next,10);
if (errno == ERANGE) {
  puts("Overflow");
} else    
  ...