
C言語を始めて1ヶ月程度の初心者です。
10進数のデータファイル(.txt形式)を取り込んで16進数に変換を行い、その結果を同じ形式のファイルを出力するプログラムを作成しております。
下記の様にプログラムを作成した所、"printf"で出力された値(モニタ画面)は問題ありませんが、肝心の"fprint"で出力したファイルの記述内容が"printf"の値と一致しておりません。
1.作成したプログラム
//10進数データ入力→16進数に変換
//変換結果をファイルに出力
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//基本設定
int main(void) {
FILE *FP,*FPI,*FPO;
//処理数値設定
char str[100];
char *word[2];
int *dec[2];
//ファイル記述:列数
int loop;
int size = 2;
/*
printf("書き込み中\n");
//事前準備スタート
FP = fopen("Dec_data.txt", "w");
fputs("9999 500\n22 8000\n", FP);
fclose(FP);
printf("書き込み完了\n");
//事前準備終了
*/
//Output
if ((FPI = fopen("Dec_data.txt", "r")) != NULL) {
while (fgets(str, 100, FPI) != NULL) {
//文字列をスペースにて分割
word[0] = strtok(str, " ");
word[1] = strtok(NULL, " ");
//文字列を数値データに変換(dec[]=int:整数)
dec[0] = atoi(word[0]);
dec[1] = atoi(word[1]);
//10進数→16進数に変換(4桁指定出力の場合:空き桁に"0"を出力)
printf("%04x %04x\n", dec[0], dec[1]);
}
}
//結果をファイル(txt形式)に出力
if ((FPO = fopen("Hex_data.txt", "w")) != NULL) {
for (loop = 0; loop < size; loop++) {
fprintf(FPO, "%04x %04x\n", dec[0], dec[1]);
}
}
fclose(FPO);
fclose(FPI);
return 0;
}
2.読み込むファイルの内容(Dec_data.txt)
9999 500
22 8000
3."printf"での結果(問題なし)
270f 01f4
0016 1f40
4.出力ファイルの結果(Hex_data.txt)
0016 1f40
0016 1f40
"printf"の結果と一致した値が出力ファイルの値として記述されてほしいのですがどうすればよいのでしょうか?
回答よろしくお願いいたします。

No.2ベストアンサー
- 回答日時:
以下のようにしてください。
修正個所は、//追加、//変更のコメントをいれてます。
//10進数データ入力→16進数に変換
//変換結果をファイルに出力
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//基本設定
int main(void) {
FILE *FP,*FPI,*FPO;
//処理数値設定
char str[100];
char *word[2];
int dec[2][2]; //変更
//ファイル記述:列数
int loop;
int size = 2;
/*
printf("書き込み中\n");
//事前準備スタート
FP = fopen("Dec_data.txt", "w");
fputs("9999 500\n22 8000\n", FP);
fclose(FP);
printf("書き込み完了\n");
//事前準備終了
*/
//Output
if ((FPI = fopen("Dec_data.txt", "r")) != NULL) {
loop = 0; //追加
while (fgets(str, 100, FPI) != NULL) {
//文字列をスペースにて分割
word[0] = strtok(str, " ");
word[1] = strtok(NULL, " ");
//文字列を数値データに変換(dec[]=int:整数)
dec[0][loop] = atoi(word[0]); //変更
dec[1][loop] = atoi(word[1]); //変更
//10進数→16進数に変換(4桁指定出力の場合:空き桁に"0"を出力)
printf("%04x %04x\n", dec[0][loop], dec[1][loop]); //変更
loop++; //追加
}
}
//結果をファイル(txt形式)に出力
if ((FPO = fopen("Hex_data.txt", "w")) != NULL) {
for (loop = 0; loop < size; loop++) {
fprintf(FPO, "%04x %04x\n", dec[0][loop], dec[1][loop]); //変更
}
}
fclose(FPO);
fclose(FPI);
return 0;
}
--------------------------
2つのデータが2行あるので、データは4つあります。
これを全て記憶するには、
int dec[2];では足りません。
int dec[2][2];のようにします。
もし、100行のデータを記憶するなら
int dec[2][100];
のようにしてください。
なるほど!行のデータを記憶する項目を追加するのですね!上記の様に記述を行ったところ狙い通りのファイルの書き込みができました!ありがとうございます!
No.1
- 回答日時:
>int *dec[2];
で用意しているのはポインタの配列ですが意図したものなんですかね?
# ポインタとして参照していないので動作はしているようですが。
>肝心の"fprint"で出力したファイルの記述内容が"printf"の値と一致しておりません。
printf()とfprintf()の実行タイミングに注意しましょう。
printf()はファイルの読み込みループ『中』です。
が、fprintf()の読み込み『終了後』です。
dec配列に入っているのは『最後に設定した値』です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JISコードでファイル出力したい。
-
ファイル出力の場所を指定
-
Acccess レポートをグループ別...
-
ワークステーション上の画面の...
-
VC++でUTF-8のファイルを出力し...
-
Paiza Cloudです。 どうやれば...
-
印刷イメージをBMP等でファイル...
-
VC++での外部ファイル(batファ...
-
C言語でファイルからの文字列抽...
-
ファイル形式またはファイル拡...
-
C言語でのppmファイル作成
-
ファイルI/O完了待ち
-
VB.NETでExcelファイルを出力す...
-
ファイルに書き換えるように出...
-
MS-Word で作成した表をLatexに...
-
入力した値をファイルに出力す...
-
アプリを実行すると、作成者を...
-
シェル(Unix/Linux)を使用し...
-
Wordマクロで指定したフォルダ...
-
c言語の質問です。 ランダムに4...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド(例えばls)の出力結果...
-
【ExcelVBA】UTF-8(BOM無)でC...
-
ファイル出力の場所を指定
-
VC++でUTF-8のファイルを出力し...
-
ファイルの文字コードをUTF-8に...
-
シェルコマンドの 2>&1 とはど...
-
Acccess レポートをグループ別...
-
BitBltについて。
-
Wordマクロで指定したフォルダ...
-
ファイル形式またはファイル拡...
-
CSV形式に変換
-
テキストファイルに改行コード...
-
C++ fprintf_sの使い方がわからん
-
外国語とCSVについて
-
1行ずつではなくまとめてファイ...
-
pcap形式データをテキストへ抽出
-
重複チェックプログラム
-
AviUtlでAVI出力が途中までしか...
-
CBool関数について VB6とVB.net...
-
標準出力とファイルに効率的に...
おすすめ情報