0

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

}

现在,正如您在我的第一次检查中看到的那样,我的意图是查看第一个 temp int(假设保存一个 int,它确实是“1301”)是否实际上是一个整数。当我使用未注释的行时,它不符合条件并且没有打印任何内容。当我使用注释行时,它会打印我的错误消息。这不是倒退吗!?我如何检查这些整数和字符串实际上是整数和字符串并在脸上报告错误?

4

3 回答 3

3

isdigit属于字符分类功能。所以这个函数会将返回的值解释atoi为一个字符(使用你的字符集,比如 ASCII)。这不会是你所期望的。如果你想处理错误,你可以阅读这个答案

于 2013-03-05T18:10:47.517 回答
3

isdigit - 检查文档 - 它应该用于字符变量,而不是整数值变量。

看看这个:

char digit = '1';
char notDigit = 'a';
char notEvenCloseADigit = 1;
int digitIsDigit = isdigit(digit);
int notDigitIsDigit = isdigit(notDigit);
int notEvenCloseADigitIsDigit= isdigit(notEvenCloseADigit);
于 2013-03-05T18:11:42.743 回答
0

这不是倒退。如果它是一个数字,isDigit 返回 true,你说你使用了“1301”。因此,您未注释的行返回 true。然而,后者采用 !true 或 false。

于 2013-03-05T18:11:39.747 回答