以下のように升目を表示し、入力した数字が交互に○と×に換わるようにしてください。
ただし、すでに入力されている場合は再度入力させるようにしてください。
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;
}
よろしくお願いします。
この問題なんですが・・・。
Re: この問題なんですが・・・。
以前の質問でも何度も言われていると思いますがcodeタグを使用してくださいね。
最初は、直接コードは書かずにどうしたら良いかのアドバイス的な感じで留めさせていただきます。
現状のコードだと×にしか変わらないのは分かりますでしょうか?
交互に○と×に切り替えるのであれば現在どちらに変えたいを保持するフラグのようなものを用意して
それを入力完了毎に切り替えてあげればいいと思います(23-24行目)
もしくは、現在のターンをカウンタとして持っておいて偶数なら○、奇数なら×のようにするなどの方法もありますね
こうして置けば、終了条件にも使えそうですし良いかもしれません。
また、このコードはいくつか問題がありますが
まずは、18行目
scanf_sで入力された値をそのままして条件判定をしていますが、0~9以外の数字を入力された場合に
配列の範囲外にアクセスしてしまいます。
また、while(1)でまわしているため入力できる升がなくなっても強制終了させなければ終わらせることができません。
#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)でまわしているため入力できる升がなくなっても強制終了させなければ終わらせることができません。
Re: この問題なんですが・・・。
沖 滉均さん、ありがとうございました。
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)に直しました。
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)に直しました。