無限ループになってしまいます

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

無限ループになってしまいます

#1

投稿記事 by 南瓜 » 15年前

前に質問したものです。C言語のプログラムの勉強をしている所です
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main () {
	int player, computer;
	int p_count = 5; /*プレイヤーの負け数残り*/
	int c_count = 5; /*コンピュータの負け数残り*/
	
	printf("[野球拳ゲーム]\n");
	srand(time(NULL));
	do {
		printf("\n野球拳するなら\n");
		printf("こういう具合にしやしゃんせ\n");
		printf("アウト セーフ\n");
		do {
			printf("よよいのよい!\n");
			printf("(グー:1 チョキ:2 パー:3を入力) > ");
			player = 0;
			scanf("%d", &player);
			while(getchar() != '\n') { }
			computer = rand()%3 + 1;
			printf("コンピュータは");
			if(computer == 1) {printf("グー");}
			else if(computer ==2) {printf("チョキ");}
			else {printf("パー");}
			printf("! ");
		} while((player != 0) && (computer == player));
		
		if((player ==1 && computer == 2) ||
				(player == 2 && computer == 3) ||
				(player == 3 && computer ==1)) {
			printf("プレイヤーの勝ち\n");
			c_count--;
		} else {
			printf("コンピュータの勝ち\n");
			p_count--;
		}
	} while((p_count != 0) && (c_count != 0));
	
	printf("\n勝負あり!\n");
	if(p_count == 0) {
		printf("あなたの負け!");
	} else {
		printf("あなたの勝ち!");
	}
	return 0;
}
上のプログラムをコンパイルすると
yakyuuken.c:21:23: warning: multi-character character constant
と出るのでコンパイル時に-Wno-multicharでエラーが出ないようにしてますが、
すると起動してもコマンド入力時に入力しても次の結果が出ずに無限ループしてしまいます。

野球拳ゲーム]\n\n野球拳するなら\nこういう具合にしやしゃんせ
\nアウト セーフ\nよよいのよい!\n(グー:1 チョキ:2 パー:3を入力) > 3
2
1
2
3
2
1
2

これは、\nの改行がうまく行かず「\n」がそのまま出てしまうのと何か関係があるのでしょうか?
OS:Mac OS X コンパイル:gcc バージョン4.0.1

ねこ

Re:無限ループになってしまいます

#2

投稿記事 by ねこ » 15年前

while(getchar() != '\n') { }

これいらないのでは?

たかぎ

Re:無限ループになってしまいます

#3

投稿記事 by たかぎ » 15年前

シフトJISでエンコーディングしていることが問題ではないでしょうか?
手元で確認したところ、 全角のバックスラッシュが入力されていました。
ことえりの設定次第ですが、opt + \またはopt + Yでどうにかなりませんか?

南瓜

Re:無限ループになってしまいます

#4

投稿記事 by 南瓜 » 15年前

ねこさん ありがとうございます。
無限ループがなくなりました!

>ことえりの設定次第ですが、opt + \またはopt + Yでどうにかなりませんか?
これは、使っているテキストエディタmiの文字コードでなくてMacの文字コードを変更しなきゃ
いけないというとですよね?
opt + \またはopt + Yをやって見たんですが、mi(UTF-8)で書き込むと
エとヌがでてしまいます。
もし、Macの文字コードを変更するにはどうすればいいでしょうか?

たかぎ

Re:無限ループになってしまいます

#5

投稿記事 by たかぎ » 15年前

> これは、使っているテキストエディタmiの文字コードでなくてMacの文字コードを変更しなきゃ
いけないというとですよね?

そんなことはありません。

> opt + \またはopt + Yをやって見たんですが、mi(UTF-8)で書き込むと
エとヌがでてしまいます。

miでも試してみましたが、そんな風にはなりません。
状況をもっと詳しく教えてください。

南瓜

Re:無限ループになってしまいます

#6

投稿記事 by 南瓜 » 15年前

mi(UTF-8)とテキストエディタ(?)で\を入力しました。
左から順番に半角\、opt + \、opt + Yです。
miで\を入力すると図のようになるのでテキストエディタで\nを入力して
そこだけ貼付けてコンパイルしています。

たかぎ

Re:無限ループになってしまいます

#7

投稿記事 by たかぎ » 15年前

まず、opt + Yは円記号になるはずですので、前回の私の回答が間違っていました。
それにしても、カタカナが出るのは変ですね。
UTF-8になっているのは間違いありませんか?
あと、使っているのは"ことえり"ですか? ATOKとかではありませんか?

南瓜

Re:無限ループになってしまいます

#8

投稿記事 by 南瓜 » 15年前

はい。miの文字コードはUTF-8にチェックを入れています。
で、たぶんMacの方は、図のように「ことえり」だと思います。

たかぎ

Re:無限ループになってしまいます

#9

投稿記事 by たかぎ » 15年前

Xcodeのエディタではどうなりますか?
それで正しく入力できるのであれば、miの問題のように思います。
miの作者に問い合わせしたほうがよいのではないでしょうか?
miのバージョンによっても状況が変わるかもしれません。ちなみに、私が使っているのは2.1.8です。

南瓜

Re:無限ループになってしまいます

#10

投稿記事 by 南瓜 » 15年前

バージョンが2.1.6だったので最新版にアップデートしました所
無事\がでて改行されるようになりました!
たかぎさん ありがとうございます。

閉鎖

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