問題
コンパイルエラーはないのですが下のコードを実行すると、illegal instraction 4と出て実行エラーになります。
手がかり
実行時はジャンケンの手を0,1,2で入力するのですが、実行エラーが起こるのは
・数字1を入力した直後(必ず)
・プログラムを起動した直後(たまに)
・0か2を入力してあいこになってAGAINと出た直後(たまに)
推測
なんとなくですが、実行エラーが出るタイミングがランダムなことからエラーの原因はおそらく、srand,randを用いた部分(---//CPUの手を決める---)にあるのではないかと考えています。
2日間ずっと考えていますが原因がわかりません。どうかお助けください。m(__)m
コード
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> typedef struct Hand{//ジャンケンの手にまつわる構造体定義 char hand[9]; int num; }HAND; int main(){ HAND *cpu=(HAND *)malloc(sizeof(HAND)),*you=(HAND *)malloc(sizeof(HAND));//CPUの手とプレイヤーの手へのポインタ char gcp[3][8]={"rock","scissors","paper"}; while(1){ //--------CPUの手を決める------------- srand((unsigned int)time(NULL)); cpu->num=rand()%3; strcpy(cpu->hand,gcp[cpu->num]); //---------プレイヤーの手を決める-------- printf("0:rock 1:scissors 2:paper >"); scanf("%d",&you->num); while(you->num<0 || 2<you->num){//123以外が入力されたら催促する。 printf("0:rock 1:scissors 2:paper >"); scanf("%d",&you->num); } strcpy(you->hand,gcp[you->num]); //---------------勝敗判断--------------- if(cpu->num==you->num){ printf("CPU:%s\nYOU:%s\n AGAIN\n",cpu->hand,you->hand); continue; } else if((cpu->num+1)%3==you->num){ printf("CPU:%s\nYOU:%s\n YOU LOSE\n",cpu->hand,you->hand); break; }else{ printf("CPU:%s\nYOU:%s\n YOU WIN\n",cpu->hand,you->hand); break; } //------------------------------ } return 0; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。