前提・実現したいこと
C言語で、テキストデータから単語を読み込み、ユーザに提示するプログラムをつくっています。コンパイルは通りますが、実行するとgetchar()が一部無視されているように動いてしまいます。
読み込んだデータは文字列の配列の0行目に格納します。そのあとgetchar()でユーザにyかnの入力をさせ、nの場合はその文字列を配列のi行目にいれ、iをカウントアップします。最後に配列の1行目から順に単語を描画します。
発生している問題・エラーメッセージ
inchoate y or n : n この単語はまだ覚えてないですね。 profligacy y or n : austerity y or n : n この単語はまだ覚えてないですね。 opprobrium y or n : apostates y or n : n この単語はまだ覚えてないですね。 cat y or n : ----- まだ覚えてない単語は以下の通りです ----- inchoate austerity apostates
読み込むファイル(English1_1.txt)
inchoate profligacy austerity opprobrium apostates cat
該当のソースコード
c
1#include <stdio.h> 2#include <string.h> 3 4// 定数宣言 ------------------------------------------------ 5#define MAX_NAME 32 // 1行の最大文字数 6 7// プロトタイプ宣言 ---------------------------------------- 8FILE *FileOpen(FILE *fp); 9void ShowWordlist(char wordlist[MAX_NAME][MAX_NAME]); 10 11// メイン関数 ---------------------------------------------- 12int main(void) 13{ 14 FILE *fp; 15 char wordlist1[MAX_NAME][MAX_NAME] = {}; 16 char answer; 17 int i = 1; 18 char fname[] = "English1_1.txt"; 19 char k; 20 21 fp = fopen(fname, "r"); 22 23 while(fgets(wordlist1[0], MAX_NAME, fp) != 0){ // 読み込む単語がなくなるまで読み込む 24 printf("%s\ny or n : ", wordlist1[0]); 25 answer = getchar(); 26 27 /***** yes と no で場合分けする *****/ 28 if(answer == 'y') printf("この単語はもう覚えてますね。\n\n"); 29 if(answer == 'n'){ 30 printf("この単語はまだ覚えてないですね。\n\n"); 31 strcpy(wordlist1[i], wordlist1[0]); 32 i++; 33 } 34 } 35 36 fclose(fp); 37 38 /***** noを選択したものを描画 *****/ 39 printf("----- まだ覚えてない単語は以下の通りです -----\n"); 40 for(i = 1; wordlist1[i][0] != '\0'; i++) printf("%s\n", wordlist1[i]); 41 42 printf("\n"); 43 44 return 0; 45}
試したこと
scanfやfscanfを使って書き直してみても同じ結果でした。
「実行するとgetchar()が一部無視されているように動いてしまいます」をもう少し具体的に記述してもらえませんか?決まったパターンで無視するのか、それともランダムに無視されるのかなど、現象がはっきりすると他の方からもアドバイスが集まりやすいと思います。

回答2件
あなたの回答
tips
プレビュー