我正在尝试创建一个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);
}
答案 0 :(得分:2)
您使用的是&&
,但您应该使用||
:
while(strlen(tr_code) != 4 || !isdigit(tr_code[0]) || !isdigit(tr_code[1]) || !isdigit(tr_code[2]) || !isdigit(tr_code[3]))
对于&&
,任何四个字符长的输入,或前四个位置中的任何一个都有一个数字(即使该内存是最后一个输入的剩余部分,因为该字符串可能更短)将通过。
答案 1 :(得分:0)
IIRC'scanf'签名返回一个整数,即终端读取的字符数。