この問題なんですが・・・。

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

この問題なんですが・・・。

#1

投稿記事 by first » 14年前

以下のように升目を表示し、入力した数字が交互に○と×に換わるようにしてください。
 ただし、すでに入力されている場合は再度入力させるようにしてください。
 7|8|9 o|x|x
----- -----
 4|5|6 → o|o|x
----- -----
 1|2|3 o|x|o

この問題の「入力した数字が交互に○と×に換わるようにしてください。」というところがわからないです。

ソースを貼っておきます。

#include "stdio.h"

int main(void)
{
int i, j;
char a[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

for(j = 7; j > 0; j = j - 3){
printf("%d|%d|%d\n", j, j + 1, j + 2);
printf("------\n");
}

while(1)
{
printf("整数を入力してください\n");
scanf_s("%d", &i);

while(a == 'o' || a == 'x'){
printf("もう一度整数を入力してください\n");
scanf_s("%d", &i);
}

a = 'o';
a = 'x';

for(j = 7; j > 0; j = j - 3){
printf("%c|%c|%c\n", a[j], a[j + 1], a[j + 2]);
printf("------\n");
}
}

return 0;
}

よろしくお願いします。

アバター
沖 滉均
記事: 237
登録日時: 14年前
住所: K県F市

Re: この問題なんですが・・・。

#2

投稿記事 by 沖 滉均 » 14年前

以前の質問でも何度も言われていると思いますがcodeタグを使用してくださいね。

コード:

#include "stdio.h"

int main(void)
{
	int i, j;
	char a[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

	for(j = 7; j > 0; j = j - 3){
		printf("%d|%d|%d\n", j, j + 1, j + 2);
		printf("------\n");
	}

	while(1)
	{
		printf("整数を入力してください\n");
		scanf_s("%d", &i);

		while(a[i] == 'o' || a[i] == 'x'){
			printf("もう一度整数を入力してください\n");
			scanf_s("%d", &i);
		}

		a[i] = 'o';
		a[i] = 'x';

		for(j = 7; j > 0; j = j - 3){
			printf("%c|%c|%c\n", a[j], a[j + 1], a[j + 2]);
			printf("------\n");
		}
	}

	return 0;
}
最初は、直接コードは書かずにどうしたら良いかのアドバイス的な感じで留めさせていただきます。

現状のコードだと×にしか変わらないのは分かりますでしょうか?
交互に○と×に切り替えるのであれば現在どちらに変えたいを保持するフラグのようなものを用意して
それを入力完了毎に切り替えてあげればいいと思います(23-24行目)
もしくは、現在のターンをカウンタとして持っておいて偶数なら○、奇数なら×のようにするなどの方法もありますね
こうして置けば、終了条件にも使えそうですし良いかもしれません。

また、このコードはいくつか問題がありますが
まずは、18行目
scanf_sで入力された値をそのままして条件判定をしていますが、0~9以外の数字を入力された場合に
配列の範囲外にアクセスしてしまいます。

また、while(1)でまわしているため入力できる升がなくなっても強制終了させなければ終わらせることができません。
There is no royal road to learning.
codeタグで指定できる言語
画像

first

Re: この問題なんですが・・・。

#3

投稿記事 by first » 14年前

沖 滉均さん、ありがとうございました。

int型のcntをつくり、それを1ずつ増やすし、それを2で割ったときあまりがでるかどうかで○と×を交互に換えることができました。

そして指摘していただいた部分も
while(1) を for(int num = 0; num < 9; num++)に直し、
while(a == 'o' || a == 'x') を while(a == 'o' || a == 'x' || i < 0 || i > 9)に直しました。

閉鎖

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