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

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

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

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

Q&A

解決済

1回答

1053閲覧

C言語 ファイルに制御文字のEOFがある場合に、EOF後の情報を読み込みたい

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

0クリップ

投稿2020/04/23 17:52

前提・実現したいこと

C言語で、EOFの後の情報を読み込みたい
情報を圧縮する課題が出たので、情報を0 1に変換し、それを8bitで書き込むプログラムを作成したのですが、文字コード上で数値の26がEOFに当たるので、00011010という符号があるとそこで読み込みが止まってしまいます。
EOFの後も読み込む方法を教えてほしいです。

実際のプログラムは最初にbit数を書き込むので、本当のEOFをスルーすることはないと思います。
EOFを避けて0~255から26を除いた255通りだけの文字を使うべきでしょうか。

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

0から256までをcharで書き込み、読み込むプログラムで、 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 -1 -1 -1 -1 -1 -1 -1 -1 ・・・ というように26以降が-1になる

該当のソースコード

C

1#include <stdio.h> 2#pragma warning(disable: 4996) 3 4int main(void) 5{ 6 FILE* fp; 7 fp = fopen("test.txt", "w"); 8 if (fp == NULL) { return -0; } 9 for (int i = 0;i < 1000;i++) { 10 fprintf(fp, "%c", i); 11 } 12 fclose(fp); 13 14 FILE* fpr; 15 fpr = fopen("test.txt", "r"); 16 if (fpr == NULL) { return -0; } 17 for (int i = 0;i < 1000;i++) { 18 printf("%3d ", fgetc(fpr)); 19 } 20 fclose(fpr); 21 22 return 0; 23}

試したこと

FILE* に1を足せば次の文字を読み込んでくれるかと思い
fpr++;とかやりましたがエラーでした。そもそもfgetcでfprの値が変わっていないので
この方法ではダメなようです

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

テキストでは無くバイナリでファイルを扱っては如何でしょうか.

なお, FILE* はその表記通り「ファイル構造体のポインタ」ですので, +1等しても無意味です.

投稿2020/04/23 17:53

編集2020/04/23 17:58
jimbe

総合スコア13209

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

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

退会済みユーザー

退会済みユーザー

2020/04/23 18:09

fpr = fopen("test.txt", "r");を fpr = fopen("test.txt", "rb");にするってことですよね? 無事読み込めました。ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問