Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解isdigit()在C中的工作原理_C_String_Int - Fatal编程技术网

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

了解isdigit()在C中的工作原理,c,string,int,C,String,Int,我试图检查从文件中读取的某些变量是否为整数,如果不是,则忽略它们并继续打印错误消息。因此,我使用isdigit()来查看变量是否为int,并在某种意义上保持“向后”工作 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("Inv

我试图检查从文件中读取的某些变量是否为整数,如果不是,则忽略它们并继续打印错误消息。因此,我使用isdigit()来查看变量是否为int,并在某种意义上保持“向后”工作

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”)实际上是一个整数。当我使用未注释的行时,它不符合条件,并且不打印任何内容。当我使用注释行时,它会打印我的错误消息。这不是倒退吗!?如何检查这些整数和字符串实际上是整数和字符串,并报告面上的错误?

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

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

这不是倒退。如果是一个数字,isDigit返回true,您说您使用了“1301”。因此,您的未注释行返回true。然而,后者需要更多的时间!正确或错误。

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

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

请查看:

char digit = '1';
char notDigit = 'a';
char notEvenCloseADigit = 1;
int digitIsDigit = isdigit(digit);
int notDigitIsDigit = isdigit(notDigit);
int notEvenCloseADigitIsDigit= isdigit(notEvenCloseADigit);

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

请查看:

char digit = '1';
char notDigit = 'a';
char notEvenCloseADigit = 1;
int digitIsDigit = isdigit(digit);
int notDigitIsDigit = isdigit(notDigit);
int notEvenCloseADigitIsDigit= isdigit(notEvenCloseADigit);

也许你更应该谈论“字符”和“整数”,而不是
char
int
,因为
'1'
int
类型。@Kirilenko完成了,你是对的;这就是我的意思,我希望这就是我被理解的方式。也许你更应该谈论“字符”和“整数”,而不是
char
int
,因为
'1'
int
类型。@Kirilenko完成了,你是对的;这就是我的意思,我希望这就是我的理解。一般来说,“数字”不是“数字”。一个数字由一个或多个数字组成。一般来说,“数字”不是“数字”。一个数字由一个或多个数字组成。这是完全错误的
atoi(3)
获取字符串并将其解释为十进制数(如果可能)。无论
atoi
返回什么,它都不是应用
isdigit(3)
char
。这是完全错误的
atoi(3)
获取字符串并将其解释为十进制数(如果可能)。无论
atoi
返回什么,它都不是
isdigit(3)
适用的
char