No.16167![]() |
英字以外を含むか確かめる関数 投稿者---lala(2004/08/12 22:23:50) |
||
int hani(char *a) { int j=0; /****範囲外か調べる(英字以外を含むか)****/ while(a[j]!='\0'){ if(a[j]<'A'||(a[j]>'Z'&& a[j]<'a')||a[j]>'z'){ return 1;} j++; printf("%d",j); } return 0; } 英字以外を含むか確かめる関数です。これを動かすと無限ループに入ってしまいます。何故だか良くわかりません教えてください。jの中身を出力すると常に1となってしますようです。 |
No.16168![]() |
Re:英字以外を含むか確かめる関数 投稿者---monkey(2004/08/12 23:29:56) |
||
このhani関数自体に問題はないと思います。 hani関数を使った次のプログラムは正常に動きました。 int main() { char str1[] = "abcdefgHIJ"; char str2[] = "abcdefg123"; int r1 = hani( str1 ); int r2 = hani( str2 ); printf( ", result %d, %d\n", r1, r2 ); return 0; } ---実行結果--- 123456789101234567, result 0, 1 無限ループになる理由として、引数に渡された文字列の終端が'\0'となっていないということは想定できますが、それだとjが常に1ということと矛盾します。 ともあれ、lalaさんがおっしゃるような現象が再現できないので、どうしようもありません。 |
No.16169![]() |
Re:英字以外を含むか確かめる関数 投稿者---たか(2004/08/13 11:03:10) |
||
0〜255の値を渡してみましたが永久ループに入らずに正しく実行できますね。 #include <stdio.h> #include <ctype.h> int hani(char *a); int main(void) { int i; char buf[2]; for (i = 0; i < 256; i++) { buf[0] = (char)i; buf[1] = '\0'; if (isalnum(i)) printf("%d %d %d %c\n", i, buf[0], hani(buf), i); else printf("%d %d %d\n", i, buf[0], hani(buf)); } return 0; } int hani(char *a) { int j=0; /****範囲外か調べる(英字以外を含むか)****/ while(a[j]!='\0'){ if(a[j]<'A'||(a[j]>'Z'&& a[j]<'a')||a[j]>'z'){ return 1;} j++; printf("%d ",j); } return 0; } |