変な動作をしてしまう
月名の日本語を入力して英語にするプログラムなのですが、最後の
「間違えた月:」の結果がしっかり表示されません。
結果のどうこうに問わず、必ず「間違えた月:1月,1月,1月,1月,
1月,1月,4月,5月,」と表示されてしまうのです。
ちなみに、その上の「正解した月」はちゃんと思惑通りに
動作します。
このプログラムのどこがおかしいためにそのように表示されて
しまうのでしょうか?
よろしくお願いします。
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define swap(type,x,y) do{type t=x;x=y;y=t;}while(0)
char *tukistr[]={"january","feburary","march","april","may","june","july",
"augst","september","october","november","december"};
int main(void)
{
int nstr[12]={0,1,2,3,4,5,6,7,8,9,10,11};
char tuki[10];
int num;
int seikai=0;
int k=0;
int seiho[12];
int huseiho[12];
int m=0;
int i,j,p;
char hen;
srand(time(NULL));
printf("月名の英語を入力してください。入力は大文字でも小文字でも構いません。\n");
for(i=11;i>0;i--)
{
j=rand()%i;
swap(int,nstr[j],nstr[i]);
}
for(i=0;i<12;i++)
{
printf("%d月 : ",nstr[i]+1);
scanf("%s",tuki);
do{
for(j=0;j<strlen(tukistr[nstr[i]]);j++)
{
hen=tolower(tuki[j]);
if(hen!=tukistr[nstr[i]][j])
{
printf("違います。正解を見ますか? 0-いいえ/1-はい:");
huseiho[m++]=nstr[i];
scanf("%d",&num);
if(num==0)
{
printf("もう一度入力してください。:");
p=1;
scanf("%s",tuki);
j=0;
}
break;
}
}
}while(num==0 && j<strlen(tukistr[nstr[i]]));
if(j==strlen(tukistr[nstr[i]]))
{
printf("正解です。\n");
if(p!=1)
{
seikai++;
seiho[k++]=nstr[i];
}
p=0;
}
else if(num==1)
{
printf("%d月は%sです。\n",nstr[i]+1,tukistr[nstr[i]]);
}
}
printf("12個のうち%d個が正解でした。\n",seikai);
printf("正解した月:");
for(j=0;j<12;j++)
{
for(i=0;i<12;i++)
{
if(j==seiho[i])
{
printf("%d月",j+1);
if(j!=11)
{
printf(",");
}
}
}
}
printf("\n\n");
printf("間違えた月:");
for(j=0;j<12;j++)
{
for(i=0;i<12;i++)
{
if(j==huseiho[i])
{
printf("%d月",j+1);
if(j!=11)
{
printf(",");
}
}
}
}
return 0;
}