c - 了解 isdigit() 在 C 中的工作原理

标签 c string int

我正在尝试检查从文件中读入的某些变量是否为整数,如果不是,则忽略它们并继续打印错误消息。所以我使用 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/

相关文章:

c++ - 我可以在 C++ 中对 int 值使用 not 运算符吗?

c - LinkedList - 如何释放使用 malloc 分配的内存

c - pthread_mutex_lock 和 pthread_cond_wait/signal 导致死锁

c - 将 V=s Flage 传播到所有子 makefile

c++ - 使用 bool 作为左值

json - Swift 4 可编码 : the keys are Int array in JSON data

c - Libcurl : Failed to connect to www. google.fr 连接被拒绝

c++ - 字符串末尾有未知字符

python - 如何使用Python3查找日期列表中的所有日期

c - 如何确定字符串长度?