1

我正在尝试创建一个 while 循环,其中条件检查字符串的前四个元素是否不是整数。这是我的代码,不知何故它不起作用。我尝试使用 ctype.h 标头中的 isdigit 函数。

char tr_code[200];
char *endptr;

scanf("%s", &tr_code);
fd_code=strtol(tr_code,&endptr,10);

while(strlen(tr_code)!=4 && isdigit(tr_code[0])==0 && isdigit(tr_code[1])==0 && isdigit(tr_code[2])==0 && isdigit(tr_code[3])==0)
{
    printf("\nInvalid Code. please enter another '4-digit' Code: ");
    scanf("%s", &tr_code);
    fd_code=strtol(tr_code,&endptr,10);
}
4

2 回答 2

2

您正在使用&&,但||您应该使用的是:

while(strlen(tr_code) != 4 || !isdigit(tr_code[0]) || !isdigit(tr_code[1]) || !isdigit(tr_code[2]) || !isdigit(tr_code[3]))

使用&&,任何四个字符长的输入,或者在前四个位置中的任何一个都有一个数字(即使该内存是最后一个输入的剩余部分,因为字符串可能更短)都会通过。

于 2012-12-06T04:19:28.977 回答
0

IIRC 'scanf' 签名返回一个整数,即在终端读取的字符数。

于 2012-12-06T04:13:29.813 回答