Hiromi1623
@Hiromi1623

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

C言語:ファイルの中身を正確に出力したい。

Q&A

解決したいこと

C言語でファイル名を入力し、該当するファイルを開いてその中に格納されている数字を表示するプログラムを作成する課題があります。

課題ではbmpファイルに
0
32
64
96
128
160
192
224
の数字が格納されいるファイルを使います。
しかし実行すると見当違いの値が出力されます。改善するにはどうすればいいのでしょうか?

発生している問題・エラー

ファイル名:test01.bmp
test01.bmpをオープンしました.
48
10
51
50
10
54
52
10
57
54
10
49
50
56
10
49
54
48
10
49
57
50
10
50
50
52
test01.bmpをクローズしました.

該当するソースコード

#include <stdio.h>
#include <stdlib.h>
#define MAXNAME 50
int main(void)
{
	FILE* fp;
	char filename[MAXNAME];
	int i;
	
	printf("ファイル名:");
	scanf("%s", filename);
	
	fp = fopen(filename, "r"); 
	if (fp == NULL)
	{
		printf("%sをオープンできません.\n", filename);
		exit(1);
	}
	printf("%sをオープンしました.\n", filename);
	while ((i = fgetc(fp)) != EOF) {
		printf("%d\n", i);
	}
	
	fclose(fp);
	printf("%sをクローズしました.\n", filename);
	return (0);
}
0

2Answer

fgetc は一文字(一バイト)ずつ読むので
‘0’
改行コード ‘\n’
‘3’
‘2’
改行コード
のように読んでいきます。
それぞれのASCIIコード(intで解釈する)は出力されている
48 10 51 50 10
ですね。

一文字ずつ読むよりも例えば行単位で捉えるのが得策かなと思いました。

2Like

Comments

  1. @Hiromi1623

    Questioner

    fgets関数にすることで出力できました。ありがとうございます。

次のように変更すると先の解答で言われている値が出力され,原因が見えてくると思います.

	while ((i = fgetc(fp)) != EOF) {
-		printf("%d\n", i);
+		printf("%c\n", i);
	}
1Like

Your answer might help someone💌