1

文字列の最初の4つの要素が整数ではないことを条件がチェックする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

You're using &&, but || is what you should be using:

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

With &&, any input that's four characters long, or has a digit in any of the first four positions (even if that memory is leftovers from the last input, since the string could be shorter) will pass.

于 2012-12-06T04:19:28.977 に答える
0

IIRC 'scanf' 署名は、端末で読み取られた文字数である整数を返します。

于 2012-12-06T04:13:29.813 に答える