二次元配列の関数

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

二次元配列の関数

#1

投稿記事 by Sena » 18年前

いつもお世話になっております。
質問なんですが、わかる方いましたらお願い致します。


二次元配列の関数なんですが、
このようなchar型に入力を数値入力をしたいのですが、
入力部分わ関数に分けて行い、入力した文字列をmain()
に戻して出力したいのですが、どのように文字列を引数として
渡せばいいでしょうか??

ポインターでアドレスを渡せばいいのでしょうか?
3日くらい悩んだのですが、苦戦しております。
わかる方お願い致します。
void main()
{
   char c[5][10];
}
char input()
{
 fgets()
return c;
}

なぎ

Re:二次元配列の関数

#2

投稿記事 by なぎ » 18年前

結論だけ言えば、

void input(char c[/url][10])
{
// この中で、 c[/url][/url] を設定する
}

int main()
{
char c[5][10];
input(c);
}

で、引数は渡せます。

fgets() で文字列を受け取りたい(キーボードから?)であれば、
この場合は、

fgests(c, 10, stdin);

で、i 番目の配列に入力できるのではないかなと思います。

管理人

Re:二次元配列の関数

#3

投稿記事 by 管理人 » 18年前

プログラムから拝見すると少しプログラムについて誤解されてらっしゃるようですので、
void main()
{
  char c[5][10];
}
char input()
{
  fgets()
  return c;
}
 
ここですけど、引数としてもらった値をここで返せばmainに渡ると思っているのではないでしょうか?
アドレスを渡せば自作関数内で変更したデータはそのまま変更されます。
アドレスを渡さなければ自作関数内で変更したデータはmainで反映されません。

今回はアドレスを渡しているので、main内で変更が反映されますし、returnはなくてOKです。
void関数でいいでしょう。
(returnの意図していた事が違ったらすみません)

ちょっと関数の値受け渡し、関数の作り方、返り値の使い方、などを勉強してみてください。

Sena

Re:二次元配列の関数

#4

投稿記事 by Sena » 18年前

みなさんありがとうございます。

そうですよね、アドレスを渡せば良いのですね♪
ありがとうございます。

もし二次元配列をアドレスとして関数に渡しても、二次元配列の機能として
使えるのでしょうか??

または、特別な使い方があるのでしょうか??

管理人

Re:二次元配列の関数

#5

投稿記事 by 管理人 » 18年前

ご質問の意味が少々わかりにくいのですが。。
えぇと、メイン関数の中で宣言したものは、自作関数にきちんと渡せばきちんと使用できますよ。
ポインタで渡せば値は変更できますし、アドレスを渡さなければただのコピーした値として扱われます。

一度こんなプログラムを書いてみてはいかがでしょうか?
#include<stdio.h>

int print(int a[3][3]){
    int i,j;
//ここで色々2次元配列の中身を変更してみる
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            printf("%d ",a[j]);
    printf("\n\n");
    return 33;
}

int main(){
    int i,a[3][3]={{0,1,2},{3,4,5},{6,7,8}};
    i = print(a);
    printf("返って来た値は%d\n",i);
    return 0;
}
 
 
 
とにかくなんとなくわかりにくいと思っていることがあればそれを解消すべく引っかかっている部分を何度もプログラム書いてみることです。

はぃさぃ

分割?えらー

#6

投稿記事 by はぃさぃ » 18年前

はじめまして、はぃさぃと申します。
シューティングゲームを作ってみようと
こちらを利用させていただいているのですが、
「6.先ほどのプログラムを分割する」の章にて
メイク時にエラーが起こってしまい悩んでいます。

.hとつけた2つのファイル(ExternGV.h、GlobalVariable.h)
をメイク時にみていないきがするのですが・・。

環境は、
  BorlandC++ Compiler 5.5
  BCC Developer
になります。

エラー文は、
Error: 外部シンボル '_img_sound_load' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_initialization' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_SetColor' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_Background' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_PlayerControl' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_Background2' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_FpsTimeFanction' が未解決(C:\DOCUMENTS AND SETTINGS\はぃさぃ\MY DOCUMENTS\TEST\DEBUG\MAIN.OBJ が参照)

** error 1 ** deleting Debug\test.exe
となっています。

プロジェクトツリーの画像も添付しておきます。

よろしくお願いいたします。

box

Re:分割?えらー

#7

投稿記事 by box » 18年前

とりあえず、
 ・main.cpp
 ・ExternGV.h
 ・GlobalVariable.h
の3つのファイルを見せてください。

Justy

Re:分割?えらー

#8

投稿記事 by Justy » 18年前

 多分これと同じ現象でしょう。

http://www.play21.jp/board/formz.cgi?ac ... q&rln=7503

はぃさぃ

Re:分割?えらー

#9

投稿記事 by はぃさぃ » 18年前

返信ありがとうございました。

過去ログにも同じような質問があったんですね。
自分が探したときにはみつけられなかったです。。

それで、自分も同じような方法で修正して
動くようになりました。

大変助かりました、ありがとうございました。

管理人

Re:分割?えらー

#10

投稿記事 by 管理人 » 18年前

過去の記事は「検索」である程度検索出来るのでよければ使ってください。
しかしなかなか過去の記事を全部調べてから投稿するのは大変ですよね。
特にこの検索システムは一度に全て検索することは出来ませんし・・・。

閉鎖

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