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

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

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

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

Q&A

解決済

3回答

3326閲覧

C言語:fread関数

rokku

総合スコア12

C

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

0グッド

0クリップ

投稿2020/05/29 07:04

編集2020/05/29 12:12

前提・実現したいこと
main.c(30)でファイル読み込みエラーを再現したい。

①正常なデータを読み込んでも戻り値が「0」で返ってくる。
正常なデータであれば、戻り値「1」が返ってくるはずである。
②ファイル読み込みエラーは、他にどのような書き方があるのかを教えて頂きたいです。

該当のソースコード
main.c

#include<stdio.h> typedef struct { char name[16]; /* 名前 */ long hp; /* HP */ long mp; /* MP */ char level; /* レベル */ char strength; /* 強さ */ char speed; /* 素早さ */ char wisdom; /* 賢さ */ long experience; /* 経験値 */ }S_STATUS; void main(void) { FILE *fp = NULL; S_STATUS character[3] = { 0 }; int rtc = 0; fp = fopen("SaveData.bin", "rb"); if (fp == NULL) { printf("ファイルオープンエラー"); } while (1) { if ((feof(fp) != 0)) { /* feof関数 */ break; /* 0 = ファイルの終端ではない */ } /* 0 != ファイルの終端 */ rtc = fread(character, sizeof(S_STATUS), 1, fp); if (rtc < 1) { printf("ファイル読み込みエラー"); break; } } fclose(fp); }

試したこと
fread関数の戻り値についてインターネットで調べた結果、fread関数の第3引数部分の個数が返ってくるという記載があった。

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

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

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

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

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

ttyp03

2020/05/29 07:14

コードは行番号を削除したうえ、コードタグで括ってください。見づらいしコピペも面倒です。
rokku

2020/05/29 07:17

行番号を削除しました。
ttyp03

2020/05/29 07:18

コードタグで括ってください。
ttyp03

2020/05/29 07:18

インデントもきれいにしてください。
rokku

2020/05/29 07:19

コードタグとは、何でしょうか。
ttyp03

2020/05/29 07:22

コードを選択したあと、上の方にある<code>を押してください。 そのあとCと入力すればOKです。
SHOMI

2020/05/29 07:23 編集

質問のテンプレートにある↓にコードを書いてください。編集画面の<code>を押下でも表示できます。 ```ここに言語名を入力 ソースコード ```
rokku

2020/05/29 07:33

コードタグのことを教えて頂き、ありがとうございます。
guest

回答3

0

freadは第2引数のサイズ単位でいくつのデータを読み込めたか(0~第3引数)を返します。
というわけで、S_STATUS構造体のサイズよりも短いファイルを読み込ませれば0が返るパターンの確認ができます。
エラーで読めなかったのか、ファイル終端に到達したのか識別したいのならfeofferrorを使用してください。

投稿2020/05/29 07:20

SHOMI

総合スコア4079

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

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

rokku

2020/05/29 08:37

ご回答頂き、ありがとうございます。
guest

0

読み込むファイルのサイズが sizeof(S_STATUS) より小さいのでは?

投稿2020/05/29 07:18

DreamTheater

総合スコア1095

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

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

rokku

2020/05/29 08:36

ご回答頂き、ありがとうございます。
guest

0

ベストアンサー

読み込みエラーを発生させたいということですね。
S_STATUS構造体のサイズよりも小さいファイルを用意しておけばよいと思います。

投稿2020/05/29 07:17

ttyp03

総合スコア17000

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問