ここから本文です

誰か助けてください!

アバター

ID非公開さん

2019/4/1319:32:12

誰か助けてください!

タイピングシステムをC言語のVisual Studio 2015でやってるのですがエラーが起きてしまいます。どうやらfor分の所が駄目だと思うのですかどこか駄目かわかりません。内容としてはファイルから2単語を2つずつ、13行に渡って構造体配列に入れるものです。

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

int main() {
struct Dtype {
char a[81];
char b[81];
};

struct Dtype data[14];
char c[10]; // a:日本語 b:ローマ字 c:入力
int sec, count = 0, loop,n;
clock_t t0;
t0 = clock();
FILE *FP;
for (loop = 0;loop < 14;loop++) {
fscanf(FP, "%s %s ", data[loop].a, data[loop].b);
}
if ((FP = fopen("data.txt", "r")) == NULL) {
printf("ファイルが開けません\n");
return -1;
}else{
printf("Enterキーを押したらスタートします\n");
do{
srand((unsigned int)time(NULL));
n = rand() % 14;
printf("%s:",data[n].a);
scanf("%s", c);
while (strcmp(data[n].b, c) != 0) {
printf("もう一度入力してください\n");
scanf("%s", c);
}
count = count + strlen(data[n].b);
sec = (double)(clock() - t0) / CLOCKS_PER_SEC;
} while (sec <= 10);
printf("入力文字数%d\n", count);
}
fclose(FP);
return (0);
}

質問等ありましたらどうぞ。
よろしくお願いしますm(__)m

閲覧数:
36
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

2019/4/1319:37:02

fscanf(FP, "%s %s ", data[loop].a, data[loop].b);
}
if ((FP = fopen("data.txt", "r")) == NULL) {

何故オープンする前に読む?

  • アバター

    質問者

    ID非公開さん

    2019/4/1319:49:24

    ありがとうこざいます、直りました。ただ終了と同時にエラーが発生します。それはどこか悪いかわかりませんか?

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

アバター

質問した人からのコメント

2019/4/13 20:40:16

まずは御二方、本当にありがとうございましたm(__)m。よく見直せばわかったことなのに見直しを怠っておりとても恥ずかしいです(´;ω;`)。改めて見直しの大切さがわかりました。ベストアンサーが一人しか選べないのがとても悲しいです。最初に回答し、本来の問題点を特定してくれた方をベストアンサーとさせていただきましたがもう一人の方も私にとってはベストアンサーです。本当にありがとうございました。

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

tre********さん

2019/4/1320:30:00

struct Dtype {
char a[81];// a:日本語
char b[81];// b:ローマ字
};
char c[10]; // :入力
scanf("%s", c);//★2か所

答えのローマ字が81バイトまでOKなのに入力が10バイトまでなので、
おそらく、長い入力を行うとc[10]のメモリエリアを越えて入力文字列が書き込まれるので、スタック破壊を検出してエラーが出ているのだと思います。

ですので、cのサイズをb以上にして、さらに入力時の最大文字数を制限すると良いと思います。

char c[81]; //80バイト+文字列終端=計81バイト
scanf("%80s", c);//★2か所:どんなに入力されても80バイトまでしか読み込まない

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる