ページ 11

文字化けが起きてしまいます

Posted: 2009年11月27日(金) 01:12
by 南瓜
C言語の勉強をしたくてある問題のプログラムを書き込んだんですが
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main(void) {
	int computer;
	
	printf("[じゃんけんゲーム]\n");
	srand(time(NULL));
	computer = rand()%3+1;
	printf("コンピュータは%d", computer);
	
	return (0);
}
コンパイルはうまくいったんですが実行すると下のような文字化けをするんです。
[????&#273346;?Q?[??]
?R???s???[?^??2
文字化けを解消するにはどうすればいいでしょうか?

OS:Mac OSX コンパイル:gcc?と思われます
以上が質問ですお願いします。

Re:文字化けが起きてしまいます

Posted: 2009年11月27日(金) 08:00
by たかぎ
ちゃんと表示されましたよ。
ただ...
文字コードをSJISで保存すると、ほぼ同じ状態を再現できました。
SJISで保存してもかまいませんが、その場合は、-finput-charset=cp932オプションを指定してください。

Re:文字化けが起きてしまいます

Posted: 2009年11月27日(金) 21:55
by 南瓜
返信ありがとうございます。しかし、
gcc -finput-charset=cp932 2-1.cをしても
[????&#273346;?Q?[??]
?R???s???[?^??1
と文字化けが起こります。
#include <stdio.h>

int main() {
	printf("Hello!");
	rewind(stdin);
	getchar();
	return 0;
}
このプログラムは、文字化けせずに済んだんですが。。。
文字コードは、ピクチャ2.pngのようにUTF-8になっていると思うんですが
何が悪いんでしょうか?

Re:文字化けが起きてしまいます

Posted: 2009年11月27日(金) 23:04
by たかぎ
GCCのバージョンを教えてください。
あと、問題のソースファイルを(本文中にペーストするのでなく)添付してください。

Re:文字化けが起きてしまいます

Posted: 2009年11月27日(金) 23:38
by 南瓜
ターミナル バージョン 2.0.2 (240.2)
です

Re:文字化けが起きてしまいます

Posted: 2009年11月28日(土) 00:44
by たかぎ
-finput-charset=cp932 を付ければ問題は解消しました。

> ターミナル バージョン 2.0.2 (240.2)
> です

ターミナルではなく、GCCのバージョンです。
まさかとは思いますが、3.4より前のバージョンであれば、-finput-charsetオプションが効きませんので、文字化けすると思います。
当方では、4.0.1と4.4.0を試しましたが、どちらもうまくいきました。

Re:文字化けが起きてしまいます

Posted: 2009年11月28日(土) 11:25
by 南瓜
すみません
gcc -dumpversion
4.0.1
とでたのでバージョン4.0.1だと思います

コンパイルするときに
gcc -finput-charset=cp932 2-1.c とすればいいんですよね?

Re:文字化けが起きてしまいます

Posted: 2009年11月28日(土) 13:19
by 南瓜
たびたび済みません
viで同じプログラムを書いた所文字化けせずにコンパイルできました...
(今までmiでプログラムを書いててそのファイルをコンパイルすると上記の文字化けが起きたのですが)
使いやすさからいうと自分はmiでプログラムを書きたいんですが
あきらめてviでプログラムを書くしかないでしょうか?

Re:文字化けが起きてしまいます

Posted: 2009年11月28日(土) 13:34
by たかぎ
> (今までmiでプログラムを書いててそのファイルをコンパイルすると上記の文字化けが起きたのですが)
> 使いやすさからいうと自分はmiでプログラムを書きたいんですが

私もmiとXCodeで確認しましたが、どちらも問題ありませんでした。

Re:文字化けが起きてしまいます

Posted: 2009年11月28日(土) 15:02
by 南瓜
miの文字コードがSJISになっていたので
UTF-8にしたら文字化けが直りました!
ありがとうございます。そして、お騒がせしました!