###前提・実現したいこと
C++で簡単なタイピングゲームを作っています。
ファイルからランダムな行を読み込んで、","で分割して分割した2番目の単語を入力させるものです。
###発生している問題・エラーメッセージ
ループ中、時々p_word_afterの指す値がNULLになります。この時、p_word_beforeの指す文字列は一つ前のループのときと同じになっています。
ちなみに、rand()%55の値が同じである場合はp_word_afterに値が入っているので、これは原因ではないと思います。これはどういった現象なんでしょうか。
###該当のソースコード
c++
1int key=0,count,score=0,mistake=0,ran=0,line,add,word_num; 2int level=0; 3char *advise; 4unsigned i; 5char line_text[256]; 6char word_before[50][128]; 7char word_after[50][128]; 8char *p_word_before; 9char *p_word_after; 10FILE *fp; 11fp=fopen(<<filename>>,"r"); 12for(count=50;count>0;count--){ 13 rewind(fp); 14 p_word_before=word_before[count]; 15 p_word_after=word_after[count]; 16 int len; 17 srand((unsigned)time(NULL)); 18 line=0; 19 for(line=rand()%55;line>0;line--){ 20 fgets(line_text,256,fp); 21 } 22 p_word_before=strtok(line_text,","); 23 p_word_after=strtok(NULL,","); 24 system("cls"); 25 add=0; 26 while(*(p_word_after+add)!='\n'){ 27 add++; 28 } 29 *(p_word_after+add)='\0'; 30 printf("%s (%s) 残り%d単語\n",p_word_before,p_word_after,count); 31 i=0; 32 len=strlen(p_word_after); 33 while(i<len){ 34 if(_kbhit()){ 35 key=_getch(); 36 if(key==0||key==224)key=_getch(); 37 if(key==p_word_after[i]){ 38 printf("checked %c\n",key); 39 i++; 40 score++; 41 }else{ 42 mistake++; 43 } 44 fflush(stdin); 45 } 46 } 47}
###補足情報(言語/FW/ツール等のバージョンなど)
IDE : VisualStudio2012 for Desktop
回答2件
あなたの回答
tips
プレビュー