質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

1回答

2257閲覧

タイピングゲームでの正打率の出し方

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/01/30 15:45

前提・実現したいこと

C言語の練習でタイピングゲームを作成しています。
回答し終えた後、正打率(正しく入力できた割合)を算出したのですがなかなかうまくいきません。
出題の文字はファイルから読み込む形です
正打率を求めるにあたって、
1.出題の文のすべての文字数(出題文字数)
2.間違いも含めたすべての入力数(すべての入力数)
を数え、正打率=出題文字数/すべての入力数
として答えをだそうとしています。

ソースコードの中に出題分がある場合なら文のすべての文字数をforで求められるのですが、
ファイルアクセスの場合はどのようにして算出すればよいでしょうか?

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <time.h>

int main(void)
{
FILE *fp;
char str[256];
int len,i,ch;
clock_t start,end;
double jikan;

fp = fopen("syutudai.txt","r"); if(fp == NULL){ printf("File Open Error\n"); return -1; } printf("以下の文字列をタイプしてください.\n"); start = clock( ); while(fgets(str,256,fp) != NULL){ len = strlen(str); str[len-1] = '\0'; len = len - 1; printf("%s\n",str); for(i = 0; i < len; i++){ while(1){ ch = getch( ); if(ch == str[i]){ putch(ch); break; } } } printf("\n"); } end = clock( ); jikan = (double)(end - start)/CLOCKS_PER_SEC; printf("\n 入力にかかった時間は%.1lf秒です.\n",jikan); printf("\n %dす.\n",len); return 0;

}

C言語

試したこと

while、forで試しましたがよくわかりませんでした。。

補足情報(FW/ツールのバージョンなど)

テキストファイルに複数行の文があります。
時間を図っており、すべて入力し終わると何秒かかったのか表示されます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/01/30 16:28

「間違いも含めたすべての入力数(すべての入力数)」だと、出題の文が"aaaaa"で、入力が"bbbbb"でも100%になってしまいますが良いのでしょうか。 > ソースコードの中に出題分がある場合なら文のすべての文字数をforで求められるのですが、 あらかじめファイルから読んでchar配列にデータを読んでおくことで同じ考え方で求められます。 尚、コードはマークダウン記法を用いて読みやすくするようにしましょう。インデントも崩れ、読みづらいとそれだけで回答は離れがちになります。 https://teratail.com/help/question-tips#questionTips3-5-1 https://teratail.com/questions/238564 あたりを参考にしてソースコードを適切に表示するようにしましょう。
退会済みユーザー

退会済みユーザー

2021/01/30 17:20

ご回答ありがとうございます。 記載ミスでした、正打率=100×出題文字数÷すべての文字数、です。 マークダウン表記、教えていただきありがとうございます。確かに読みづらいですしそうするのが基本のようですね。参考になりました。
y_waiwai

2021/01/30 23:17

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答1

0

ファイルから読み込まれた文字の総数が欲しいなら、

C

1int total_len = 0; // 総数 2... 3while(fgets(str,256,fp) != NULL){ 4 len = strlen(str); 5 total_len += len; // ← こんなカンジで積算すればいいんじゃね? 6 str[len-1] = '\0'; 7 len = len - 1; 8 ... 9}

投稿2021/01/30 16:21

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/01/30 17:23

ありがとうございます。 lenが1行当りの出題文字数ですからそれを数えるだけだったみたいですね。。 間違いも含めたすべての入力数はどのようにもとめたらよろしいでしょう、、?
episteme

2021/01/30 18:50

適当なカウンタ変数、たとえば int total_hits = 0 を用意し、getch() のついでに +1 してはいかが?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問