二次元配列にデータを書き込む関数について

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

二次元配列にデータを書き込む関数について

#1

投稿記事 by Chamy » 4ヶ月前

こんにちは、
今学校の課題で、二次元配列に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] = '@';
}

Chamy

Re: 二次元配列にデータを書き込む関数について

#2

投稿記事 by Chamy » 4ヶ月前

追記
表示したい画面について記述したのですが、意図しない形になってしまいました。
要するに、5×7の縦長の二次元配列に@で0と1を描きたいというのが最終目標です。

アバター
あたっしゅ
記事: 439
登録日時: 10年前
住所: 東京23区
連絡を取る:

Re: 二次元配列にデータを書き込む関数について

#3

投稿記事 by あたっしゅ » 4ヶ月前

コード:

#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.
https://www.onlinegdb.com/ で確認。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.rosx.net/vtuber/index.html
レスがついていないものを優先して、レスすみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたっしゅ、[MrAtassyu]
http://ameblo.jp/mratassyu/
Pixiv: 666303
手提鞄屋魚有店(てさげかばんやうおありてん)

Chamy

Re: 二次元配列にデータを書き込む関数について

#4

投稿記事 by Chamy » 4ヶ月前

あたっしゅ様ご丁寧に修正頂いて本当にありがとうございます。
プログラムを貼り付けた際に一部抜け落ちてしまった部分がありまして、私自身全く気付いておりませんでした。誠に勝手ながら修正版を投稿させていただいたのですが、あたっしゅ様のご指摘に本当に助けられました。お忙しい中修整して頂いてありがとうございました!

アバター
あたっしゅ
記事: 439
登録日時: 10年前
住所: 東京23区
連絡を取る:

Re: 二次元配列にデータを書き込む関数について

#5

投稿記事 by あたっしゅ » 4ヶ月前

あっ、[ i ]を i の前後に空白入れないで書くと、ここだと、イタリック体の指定になっちゃう件か。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.rosx.net/vtuber/index.html
レスがついていないものを優先して、レスすみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたっしゅ、[MrAtassyu]
http://ameblo.jp/mratassyu/
Pixiv: 666303
手提鞄屋魚有店(てさげかばんやうおありてん)

返信

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