期待する実行例を想定して書いてもらえませんか?
/////////////////////////////////////////////////////////////////
これから3つの文が表示されます。1文表示されたら正確に入力してください。
1:matsue
>>
2:college
>>
3:of
>>
4:technology
>>
入力ミス: 〇文字(〇文字中) 正解率: 〇%
もう一度チャレンジしますか? [y/n]>
///////////////////////////////////////////////////////////////////
「printf("これから3つの文が表示されます。」の直後に
system("cls"); を実行したら、printf の意味がないと思いませんか?
コード:
printf("これから3つの文が表示されます。1文表示されたら正確に入力してください。\n\n");
//画面消去
Sleep(3000);
system("cls");
と修正しました。
とりあえず、次のように修正すると動きませんか
現在、修正したコードです。
コード:
#include <stdio.h>
#include <stdlib.h> // system()
#include <string.h> // memset()
#include <Windows.h>
#define STRN 50
#define WORD 20
int main()
{
char state[WORD][STRN] = { "matsue","college","of","technology",""};//state1~state3を初期化(問題文(STRN-1文字以内)を各自決める)
//半角文字とする
//できる人はstate1~state3を文字列の配列state[3][STRN]として改良してみてください)
char userstr[STRN]; //ユーザが入力した文字列を保存する配列
int i;
int j;
int errcount;//入力ミスの文字数をカウント
int strcount;//問題文の全文字数をカウント
char key[STRN];// 再チャレンジの有無を示す文字列を保存する変数
do {
//errcount, strcountを初期化
errcount = 0;
strcount = 0;
memset(userstr, 0, sizeof(userstr));//配列userstrをすべて0で初期化(前回入力された文字列を0にリセットする)
//案内文の表示
printf("これから3つの文が表示されます。1文表示されたら正確に入力してください。\n\n");
//画面消去
Sleep(3000);
system("cls");
// 問題 [1]
for (j = 0; state[j][0] != '\0'; j++) {
printf("%2d: %s\n ", j + 1, state[j]);
scanf_s("%s", userstr, STRN);
for (i = 0; state[j][i] != '\0'; i++) {
strcount++;
if (userstr[i] == '\0' || state[j][i] != userstr[i]) {
errcount++;
}
}
}
//結果表示
printf("入力ミス:%d文字(%d文字中) 正解率:%d[%%]\n\n", //画面に半角の「%」を表示する場合は「%%」と記述
errcount, strcount, (strcount - errcount)*100 / strcount);//正解率 = 問題文3つの全文字数に対し,正しく入力した文字数の割合[%]
//繰り返し実行するかどうか
printf("もう一度チャレンジしますか? [y/n]>");
scanf_s("%s",key, STRN);//文字入力
} while (key[0] == 'y' || key[0] == 'Y');//key[0]が'y'か'Y'だったら繰り返す
printf("\n");
return 0;
}
ビルドすると、
コード:
1>------ すべてのリビルド開始: プロジェクト:課題4.c, 構成:Debug Win32 ------
1> 課題4.c
1>c:\users\keisuke\documents\visual studio 2015\projects\課題4.c\課題4.c(48): warning C4566: ユニバーサル文字名 '\u00A0' によって表示されている文字は、現在のコード ページ (932) で表示できません
1> 課題4.c.vcxproj -> C:\Users\Keisuke\documents\visual studio 2015\Projects\課題4.c\Debug\課題4.c.exe
1> 課題4.c.vcxproj -> C:\Users\Keisuke\documents\visual studio 2015\Projects\課題4.c\Debug\課題4.c.pdb (Full PDB)
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========
実行結果は、
/////////////////////////////////////////////////////////////////
これから3つの文が表示されます。1文表示されたら正確に入力してください。
1:matsue
??
2:college
??
3:of
??
4:technology
??
入力ミス: 〇文字(〇文字中) 正解率: 〇%
もう一度チャレンジしますか? [y/n]>
///////////////////////////////////////////////////////////////////
とちゃんと入力できて判定もきちんとできますが、'??'が気になります。