こんにちは、
今学校の課題で、二次元配列に0か1かを表示させ、eを入力すると繰り返しが終了するプログラムを作っています。以下のプログラムは、それぞれ数字0のデータ、数字1のデータを二次元配列に書き込む関数を作るところまで完成させている状態です。そこで質問です。ここから、数字0,数字1のデータを書き込む関数それぞれの中に、二次元配列にデータを書き込む関数を作りたいのですが、ここから手が動きません。考え方としては、数字を描くデータを書き込む二次元配列、データを書き込む向きが横か縦かを設定する変数、データを書き込む範囲を決める変数3つを関数に渡したいです。関数の中で関数を呼び出す理論がまだあまり理解できていないため、どなたかご教授いただけると幸いです。ちなみにコンパイルして表示したい画面は
@@@
@ @
@ @
@ @
@@@
@@
@
@
@
@@@
のような表示です。
#include <stdio.h>
void Zero(char num[5][7]);
void One (char num[5][7]);
int main(void)
{
char num[5][7], str[2];
int i, j;
while(1) {
for (j = 0; j < 7; j++) {
for (i = 0; i < 5; i++)
num[j] = ' ';
}
printf("0 か 1 か e を入力(e で終了):");
scanf("%s", str);
if (str[0] == 'e' && str[1] == 0) break;
if (str[0] >= '0' && str[0] <= '1' && str[1] == 0) {
if (str[0] == '0') {
Zero(num);
}
else if (str[0] == '1') {
One(num);
}
for (j = 0; j < 7; j++) {
for (i = 0; i < 5; i++)
printf("%c", num[j]);
printf("\n");
}
}
else
printf("\n>>> 該当するものがありません <<<\n\n");
}
return 0;
}
void Zero(char num[5][7])
{
int i, j;
for (i = 1; i < 4; i++) {
num[0] = '@';
num[6] = '@';
}
for (j = 1; j < 6; j++) {
num[0][j] = '@';
num[4][j] = '@';
}
}
void One(char num[5][7])
{
int i, j;
for (j = 0; j < 7; j++) {
num[2][j] = '@';
}
num[1][0] = '@'; num[1][6] = '@'; num[3][6] = '@';
}
二次元配列にデータを書き込む関数について
Re: 二次元配列にデータを書き込む関数について
追記
表示したい画面について記述したのですが、意図しない形になってしまいました。
要するに、5×7の縦長の二次元配列に@で0と1を描きたいというのが最終目標です。
表示したい画面について記述したのですが、意図しない形になってしまいました。
要するに、5×7の縦長の二次元配列に@で0と1を描きたいというのが最終目標です。
Re: 二次元配列にデータを書き込む関数について
#include <stdio.h>
void Zero(char num[5][7]);
void One (char num[5][7]);
int
main(void)
{
char num[5][7], str[2];
int i, j;
while(1) {
for (j = 0; j < 7; j++) {
for (i = 0; i < 5; i++)
num[ i ][ j ] = ' '; // 修正
}
printf("0 か 1 か e を入力(e で終了):");
scanf("%s", str);
if (str[0] == 'e' && str[1] == 0) break;
if (str[0] >= '0' && str[0] <= '1' && str[1] == 0) {
if (str[0] == '0') {
Zero(num);
}
else if (str[0] == '1') {
One(num);
}
for (j = 0; j < 7; j++) {
for (i = 0; i < 5; i++)
printf("%c", num[ i ][ j ]); // 修正
printf("\n");
}
}
else
printf("\n>>> 該当するものがありません <<<\n\n");
}
return 0;
}
void
Zero(char num[5][7])
{
int i, j;
for (i = 1; i < 4; i++) {
num[ i ][ 0 ] = '@'; // 修正
num[ i ][ 6 ] = '@'; // 修正
}
for (j = 1; j < 6; j++) {
num[ 0 ][ j ] = '@';
num[ 4 ][ j ] = '@';
}
}
void
One(char num[5][7])
{
int i, j;
for (j = 0; j < 7; j++) {
num[ 2 ][ j ] = '@';
}
num[ 1 ][ 0 ] = '@'; num[ 1 ][ 6 ] = '@'; num[ 3 ][ 6 ] = '@';
}
// end.
VTuber:
[香車]東上☆Aho(暎帆)☆海美
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
[香車]東上☆Aho(暎帆)☆海美
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
Re: 二次元配列にデータを書き込む関数について
あたっしゅ様ご丁寧に修正頂いて本当にありがとうございます。
プログラムを貼り付けた際に一部抜け落ちてしまった部分がありまして、私自身全く気付いておりませんでした。誠に勝手ながら修正版を投稿させていただいたのですが、あたっしゅ様のご指摘に本当に助けられました。お忙しい中修整して頂いてありがとうございました!
プログラムを貼り付けた際に一部抜け落ちてしまった部分がありまして、私自身全く気付いておりませんでした。誠に勝手ながら修正版を投稿させていただいたのですが、あたっしゅ様のご指摘に本当に助けられました。お忙しい中修整して頂いてありがとうございました!
Re: 二次元配列にデータを書き込む関数について
あっ、[ i ]を i の前後に空白入れないで書くと、ここだと、イタリック体の指定になっちゃう件か。
VTuber:
[香車]東上☆Aho(暎帆)☆海美
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
[香車]東上☆Aho(暎帆)☆海美
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。