我正在尝试检查从文件中读入的某些变量是否为整数,如果不是,则忽略它们并继续打印错误消息。所以我使用 isdigit() 来查看变量是否为整数,并且它在某种意义上一直在“向后”工作。
int parseStudent(struct student *person, char *data){
char *ptr;
int temp;
int i = 0;
ptr = strtok(data, DELIM);
temp = atoi(ptr);
if(isdigit(temp)){printf("Invalid TERM integer!\n");}
//if(!isdigit(temp)){printf("Invalid TERM integer!\n");}
//person[i].term = temp;
ptr = strtok(NULL, DELIM);
person[i].id = atoi(ptr);
ptr = strtok(NULL, DELIM);
strcpy(person[i].lastname, ptr);
ptr = strtok(NULL, DELIM);
strcpy(person[i].firstname, ptr);
ptr = strtok(NULL, DELIM);
strcpy(person[i].subjectname, ptr);
ptr = strtok(NULL, DELIM);
person[i].catalog = atoi(ptr);
ptr = strtok(NULL, DELIM);
strcpy(person[i].section, ptr);
}
现在,正如您在我的第一次检查中看到的那样,我的目的是查看第一个临时 int(假定包含一个 int,它执行“1301”)是否实际上是一个整数。当我使用未注释的行时,它不满足条件并且不打印任何内容。当我使用注释行时,它会打印我的错误消息。这不是倒退吗!?我如何检查这些整数和字符串实际上是整数和字符串并报告错误?
最佳答案
isdigit
属于字符分类函数。所以这个函数会将 atoi
返回的值解释为一个字符(使用你的字符集,比如 ASCII)。这不会是你所期望的。如果想处理错误,可以阅读this answer .
关于c - 了解 isdigit() 在 C 中的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15230998/