※ ChatGPTを利用し、要約された質問です(原文:ループが変な動作をする)
ループが変な動作をする
このプログラムは表示された数値を逆に入力するプログラムです。
入力した値の正誤を表示します。結果に問わず3回で終了する
ようにしたいです。
ところが、下のプログラムを動作させたところ間違いを3回入力
したら終了するという仕様になってしまっています。
何がおかしいのでしょうか?
for(m=0;m<3;m++)
{
---------------------------------------(省略)
if(strcmp(gyakuho,nyuu)!=0)
{
printf("\a間違いです。\n");
}
else
{
printf("正解です。\n");
count++;
}
}
おそらく、間違っているのはループの中のこの部分なのでは
ないかと思います。
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
int sleep(unsigned long x)
{
clock_t c1=clock(),c2;
do{
if((c2=clock())==(clock_t)-1)
{
return -1;
}
}while(1000.0*(c2-c1)/CLOCKS_PER_SEC<x);
return 0;
}
int main(void)
{
char gyaku[4];
char gyakuho[4];
int i,j,m;
char nyuu[4];
int k=0;
int count=0;
clock_t start,end;
char x;
srand(time(NULL));
printf("4桁の数値を記憶しましょう。\n");
start=clock();
for(m=0;m<3;m++)
{
x='1'+rand()%9;
gyaku[0]=x;
for(i=1;i<4;i++)
{
do{
x='0'+rand()%10;
for(j=0;j<i;j++)
{
if(x==gyaku[j])
{
break;
}
}
}while(j<i);
gyaku[i]=x;
}
gyaku[4]='\0';
printf("%s",gyaku);
fflush(stdout);
sleep(500);
printf("\r \n");
for(i=3;i>=0;i--)
{
gyakuho[k++]=gyaku[i];
}
gyakuho[4]='\0';
printf("表示された数字を逆に入力せよ:");
scanf("%s",nyuu);
if(strcmp(gyakuho,nyuu)!=0)
{
printf("\a間違いです。\n");
}
else
{
printf("正解です。\n");
count++;
}
k=0;
}
end=clock();
printf("3回中%d回成功しました。\n",count);
printf("%.1f秒でした。\n",(double)(end-start)/CLOCKS_PER_SEC);
return 0;
}
お礼
回答ありがとうございました。 ご指摘の通りの修正をしたら正常に動作するようになりました。 領域が不正に使われていたために異常をきたしていたのかも しれませんね。