同じ文字列が複数回出力されないように乱数を異なるものにしたい
C言語でタイピングを練習するプログラムを作っています。
配列の中の文字列をランダムに出力して、その通り文字を入力させるものです。
正誤判定は1文字ずつhantei関数で行い、間違えると警告音が鳴りMissがカウントされます。
しかしこのままでは同じ文字列が複数回出力されることがあります。
また今後配列の中の文字列は25~30くらいに増える予定です。
このことを考慮して同じ文字列が複数回出力されないようにするにはどうしたらいいですか?
該当のソースコード
C言語
1#include<stdio.h> 2#include<stdlib.h> 3#include<time.h> 4#include<conio.h> 5 6int hantei(char y, char u) 7{ 8 if(y==u) 9 { 10 return 1; 11 } 12 else 13 { 14 return -1; 15 } 16} 17 18int main(void) 19{ 20 char moji4[15][5]={"getc","putc","feof","gets","puts","case","else","goto","char","long","main","null","void","math","enum"}; 21 22 char input, retry; 23 int ha, rns, miss, j, i; 24 double req_time ; 25 clock_t start, end; 26 27 do{ 28 printf("\n【タイピング練習プログラム】スペースキーを押してスタートです"); 29 while(1) 30 { 31 input=_getch(); 32 if(0x20==input) 33 { 34 putchar('\n'); 35 miss=0; 36 break; 37 } 38 } 39 srand((unsigned int)(time(NULL))); 40 start=clock(); 41 42 for(j=0; j<10; j++) 43 { 44 printf("\n第%d問\n",j+1); 45 rns=rand() % 15; 46 47 printf("【 %s 】を入力してください:",&moji4[rns][0]); 48 for(i=0; i<4; i++) 49 { 50 while(1) 51 { 52 input=_getch(); 53 if(ha=hantei(moji4[rns][i],input)==1) 54 { 55 printf("%c",input); 56 break; 57 } 58 else 59 { 60 putchar('\a'); 61 miss++; 62 } 63 } 64 } 65 putchar('\n'); 66 } 67 68 end=clock(); 69 req_time = (end-start)/1000; 70 printf("\n≪タイピング練習プログラム終了≫\n Time:%.1f秒 / Miss:%d回\n\n",req_time,miss); 71 72 printf("もう一度挑戦しますか?(YESはスペースキーを入力/NOはスペースキー以外を入力)"); 73 retry=_getch(); 74 puts("\n"); 75 76 }while(0x20==retry); 77 78 return 0; 79}
試したこと
ネットで探してみたのですが、様々なやり方があってわかなかったです。
いただいた回答にあるシャッフルというのがよくわかりません。どのように組み込めばよいのでしょうか?
回答4件
あなたの回答
tips
プレビュー