なんとなくはできたのですが、以下のエラーを解決できません。
1>課題4.c(56): warning C4047: '関数': 間接参照のレベルが 'const char *' と 'int' で異なっています。
1>課題4.c(56): warning C4024: 'puts': の型が 1 の仮引数および実引数と異なります。
1>課題4.c(54): warning C4473: 'scanf_s': 書式文字列として渡された引数が不足しています
1> 課題4.c(54): note: プレースホルダーとそのパラメーターには 2 の可変個引数が必要ですが、1 が指定されています。
1> 課題4.c(54): note: 不足している可変個引数 2 が書式文字列 '%s' に必要です
1> 課題4.c(54): note: この引数はバッファー サイズとして使用されま
//////////////////////////////////////////////////////////////////////
//
// タイピングのプログラム typing.c
//
//////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h> // system()
#include <string.h> // memset()
#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");
//画面消去
system("cls");
// 問題 [1]
for (j = 0; j < WORD; j++) {
for (i = 0; i < STRN; i++) {
puts("i");
scanf("%s", &userstr[i]);
strcount++;
if (puts(i) != userstr[i]) {
errcount++;
}
}
}
//結果表示
printf("入力ミス:%d文字(%d文字中) 正解率:%d[%%]\n\n", //画面に半角の「%」を表示する場合は「%%」と記述
errcount, strcount, (strcount - errcount) / strcount); //正解率 = 問題文3つの全文字数に対し,正しく入力した文字数の割合[%]
//繰り返し実行するかどうか
printf("もう一度チャレンジしますか? [y/n]>");
gets_s(key, 49); //文字入力
} while (key[0] == 'y' || key[0] == 'Y');//key[0]が'y'か'Y'だったら繰り返す
printf("\n");
return 0;
}