このような問題が学校で出題されました。
学校の先生に質問してみたところ、原因はわからないからやらなくていいと言われてしまったのですが、納得もいかないので質問をさせていただきました。
プログラムは此方です。
#include<stdio.h>
#include <string.h>
int main(void)
{
char str[50],Emoji[50],Nmoji[50],Elsemoji[50];
char *x;
int i=0,j=0,k=0,h=0,len=0;
scanf(" %s",str); //入力された文字列を保存
x = str;
while( *x != '\0') //終端文字出ない限りループ
{
if(*x >= 65 || *x <= 122) //英文字ならば
{
Emoji[i] = *x; //英文字用配列に格納
i++;
}
if( *x >= 48 || *x <= 57) //数字ならば
{
Nmoji[j] = *x; //数文字用配列に格納
j++;
}
else //英語、数字以外の場合
{
Elsemoji[k] = *x; //Else配列に格納
k++;
}
x++;
}
printf("英文字は:%s \n",Emoji);
printf("数文字は:%s \n",Nmoji);
printf("それ以外:%s \n",Elsemoji);
return 0;
}
② ポインタ変数 x に str の先頭アドレスを渡す
③ x の指す実態が、終端文字 ¥0 出ない限り while文を回す
④ while文では、文字が英字、数字、その他のどれなのかを識別し任意の配列に仕分けしていく。
⑤ 仕分けされた英字、数字、その他の3種の配列の中身を表示する。
ちなみに、isdigit などの文字の要素を調べる関数は使わないつもりで考えています。
(この課題のあとに関数の説明があったため、使わない前提での問題だと思います)
01ab と入力してみたところこのような結果になりました。 全ての条件分岐を満たしてどれもに 01ab という文字が入ってしまっているように見受けられます。
フフフフフ という文字は何が原因なのか全くわかりません。
しばらく調べたり、プログラムを分割して動作させてみたりしたのですが、結局何処が原因になっているのかわかりませんでした。
大変お手数をお掛けしますが、ご教示頂けませんでしょうか。
[hr]
追記: 10進数で表示される値で比較していることは間違いではないはずですし、何がいけないのかやはりよくわかりません...