ファイルの出力で文字化けする

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
脱出の人

ファイルの出力で文字化けする

#1

投稿記事 by 脱出の人 » 16年前

何回もすいません。脱出の人です。
txtファイルに文字を書きたいんですが。(もちろんc言語で)
"%d,"の文で文字化けするみたいなんです。
スペースを入れると大丈夫なんですが、スペースを入れると邪魔なのでどうしたらいいでしょうか?
"%d ,"
重要そうな所だけ書いてみます。
for(i=0;i<480;i++)
  for(j=0;j<640;j++)
	tairu[j]=0;

void Save1(void){
	FILE *fp;
	
	fp = fopen( "MAP.txt", "w" );
	if( fp == NULL );
	for(i=0;i<480;i++){
		fprintf( fp, "{ " );
		for(j=0;j<639;j++){
            //ここを入れると文字化けする
			fprintf( fp, "%d,",tairu[j] );
		}
		fprintf( fp, "%d },\n",tairu[j] );
	}
	fclose( fp );
}

SooA

Re:ファイルの出力で文字化けする

#2

投稿記事 by SooA » 16年前

%dと','の間に'\'を入れてみてください。

脱出の人

Re:ファイルの出力で文字化けする

#3

投稿記事 by 脱出の人 » 16年前

やってみましたが文字化けしてしまいます。
ちなみに文字化けの内容ですが。
&#8315;&#11312;&#11312;&#11312;(同じ文字が大量に)&#11312;&#11312;&#11312;‰&#11389;&#2573;
↑この文の繰り返しです。多分480回?
FILE *fp;
	
	fp = fopen( "MAP.txt", "w" );
	if( fp == NULL );
	for(i=0;i<480;i++){
		fprintf( fp, "{ " );
		for(j=0;j<639;j++){
			//ここを消すと
                        //fprintf( fp, "%d\,",tairu[j] );
		}
		fprintf( fp, "%d },\n",tairu[j] );
	}
	fclose( fp );

ちゃんと表示され
{ 0 },
が480個(多分)
スペース挟むしかないんですかね?

SooA

Re:ファイルの出力で文字化けする

#4

投稿記事 by SooA » 16年前

すみません、あまりよく見てなかったんで^^;
一応こちらで試してみたソースです。
文字列中の { } , の前に \ を入れてあります。
int i, j;
	char tairu[480][640];

	for( i=0;i<480;i++)
		for( j=0;j<640;j++)
			tairu[j] = 0;

	FILE *fp;
	
	if( ( fp=fopen( "MAP.txt", "w" ) ) != NULL ){
		for(i=0;i<480;i++){
			fprintf( fp, "\{ " );
			for(j=0;j<639;j++){
				fprintf( fp, "%d\,",tairu[j] );
			}
			fprintf( fp, "%d \}\n",tairu[j] );
		}
		fclose( fp );
	}

脱出の人

Re:ファイルの出力で文字化けする

#5

投稿記事 by 脱出の人 » 16年前

>一応こちらで試してみたソースです。
文字化けせずに出来たってことですよね?
なぜか出来ないです。
そのまんまコピーし貼り付けても出来ませんでした。

>char tairu[480][640];
の部分がintだったので変えてみたんですが駄目でした。

ちなみに
char a=0;
int a=0;
の0ってtxtに出力したときに同じ文字ですよね?
出力した文字をコピーしてc言語で使おうと思ってるんですが。

SCI

Re:ファイルの出力で文字化けする

#6

投稿記事 by SCI » 16年前

質問者さん
私の環境では、何の問題もなくファイルが作られました。
もちろん、スペースも入れていません。

文字化けは表示するアプリケーション側の問題ということも十分にありえるので、もう少し情報をいただけますか?
・何のソフトで、エンコードは何で表示したか
・変数は、ローカル変数か、グローバル変数か

ちなみに、私が試したソースは以下の通りです。
#include <stdio.h>

int tairu[480][640];

int main(void)
{
	FILE *fp;
	int i, j;
	
	for (i = 0; i < 480; i++)
	{
		for (j = 0; j < 640; j++)
		{
			tairu[j] = 0;
		}
	}
	
	fp = fopen("./MAP.txt", "w");
	
	for (i = 0; i < 480; i++)
	{
		fprintf(fp, "{ ");
		for (j = 0; j < 639; j++)
		{
			fprintf(fp, "%d,", tairu[j]);
		}
		fprintf(fp, "%d },\n", tairu[j]);
	}
	fclose(fp);
	getchar();
	return 0;
}

脱出の人

Re:ファイルの出力で文字化けする

#7

投稿記事 by 脱出の人 » 16年前

Windows
VC++ 2008EE
DXライブラリ
です。
エンコードが何なのか分からないです;;
軽くググったんですがよく分からず;;
変数もよく分からないんですが
キー入力で
GetHitMouseStateAll_2
を使っているのでグローバル変数だと思います。

SCI

Re:ファイルの出力で文字化けする

#8

投稿記事 by SCI » 16年前

出来上がったテキストをメモ帳で見てますか?

脱出の人

Re:ファイルの出力で文字化けする

#9

投稿記事 by 脱出の人 » 16年前

もしかして
#include <stdio.h>
  int tairu[480][640];//これがグローバル変数
int main(void)
{
  int i, j;//これがローカル変数
}
ですか?
だとしたらグローバル変数です。

脱出の人

Re:ファイルの出力で文字化けする

#10

投稿記事 by 脱出の人 » 16年前

メモ帳で見てます。

SCI

Re:ファイルの出力で文字化けする

#11

投稿記事 by SCI » 16年前

メモ帳側がUnicodeとして認識しているので、文字化けします。
データ自体は問題ありません。

試しに、バイナリエディタ等でテキストファイルを見てください。

脱出の人

Re:ファイルの出力で文字化けする

#12

投稿記事 by 脱出の人 » 16年前

MAP.txtを右クリックでワードパッド又はVC++で見たらちゃんと表示されてました!
メモ帳じゃ無理なんですかね?

SCI

Re:ファイルの出力で文字化けする

#13

投稿記事 by SCI » 16年前

メモ帳は、サイズが大きいとUnicodeとして認識するみたいですね(詳しくは知りませんが)。
配列のサイズを小さくして、データを書き出し、メモ帳で開くとちゃんとANSIとして認識しました。

脱出の人

Re:ファイルの出力で文字化けする

#14

投稿記事 by 脱出の人 » 16年前

SCIさんSooAさんありがとうございました。

SooA

Re:ファイルの出力で文字化けする

#15

投稿記事 by SooA » 16年前

犯人はメモ帳でしたか。

自分がさくらエディタを使ってるので
気がつきませんでした^^;

解決したようで何よりです。

閉鎖

“C言語何でも質問掲示板” へ戻る