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

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

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

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

1263閲覧

テキストファイル内の16進数の文字列をASCII文字にデコード

NaoMan09

総合スコア2

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/07/20 22:20

前提・実現したいこと

54 68 65 72 65
のように16進数が1行に格納されているテキストファイル"input.txt"を読み込み、
There
とASCII文字に変換してテキストファイル"output.txt"に出力するプログラムです。
最初にwhile文で入力データ数をカウントしてからfscanf→fprintfの処理で1文字ずつカウント分変換しようと思ったのですが、下記の通り何も出力されません。
for文内の処理は別でデバックできているのでカウントの処理で何かしらの問題があると思うのですがそれ以上がわかりません、どなたか助けてください...

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

コンパイルは通り、プログラムは動くのですが何も出力されずoutputファイルの中が真っ白です

該当のソースコード

int main(){
FILE *fp;
FILE *fp2;
fp = fopen("input.txt", "r");
fp2 = fopen("output.txt", "w");
int a,ch,count;

while(1){ ch = fgetc(fp); if(ch == EOF){ break; } count ++; } for(int i=0;i<=count;i++){ fscanf(fp,"%x",&a); fprintf(fp2,"%c",a); } fclose(fp); fclose(fp2); return 0;

}

試したこと

ここに問題に対して試したことを記載してください。

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

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

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

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

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

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

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

guest

回答3

0

ベストアンサー

カウント不要:

C

1#include <stdio.h> 2 3int main(){ 4 FILE *fp; 5 FILE *fp2; 6 fp = fopen("input.txt", "r"); 7 fp2 = fopen("output.txt", "w"); 8 int a; 9 10 while ( fscanf(fp,"%x",&a) > 0 ) { 11 fprintf(fp2,"%c",a); 12 } 13 14 fclose(fp); 15 fclose(fp2); 16 return 0; 17}

投稿2020/07/20 22:39

episteme

総合スコア16614

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

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

NaoMan09

2020/07/20 22:48

こんな簡単にできたんですね⁉ ありがとうございます!
guest

0

while(1){

ch = fgetc(fp);

なぜ最初の文字を読み込んでなにもしないで捨ててるんでしょうか

ああ、ファイルサイズを取得するんなら別の方法があるでしょうに

投稿2020/07/20 22:34

編集2020/07/20 22:35
y_waiwai

総合スコア87719

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

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

0

ファイルの終わりに達してから読み込もうとしているからです。

投稿2020/07/20 22:33

Zuishin

総合スコア28656

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

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

Zuishin

2020/07/20 23:17

https://teratail.com/questions/279155#reply-397394 > 無事解決できましたし、自分自身の理解も深まりました! 答えを丸写ししただけだから、実際には何も理解していない。 それはプログラミングではない。 なぜできないか、その理由を知るのが大事。
Zuishin

2020/07/20 23:19

この質問者はおそらく近いうちに三度目の同じ質問をする。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問