こんばんは、今回初めて投稿させていただきます。よろしくお願いします。
C言語始めてまだ2カ月の初心者です。構造体について勉強中、メンバの初期化と表示を関数を使って行う処理として下のコードを書いたところ
「Run-Time Check Failure #3 The variable 'hu' is being used without being initialized 」という実行時例外が出ました。
英文の内容から、初期化していませんという内容だとは思うのですが・・・どこを直せばきちんと動くでしょうか?
#include<stdio.h>
typedef struct{
int age;
}human;
void input(human hu);
void output(human hu);
int main()
{
human hu;
input(hu);
output(hu);
return 0;
}
void input(human hu){
hu.age =5;
}
void output(human hu){
printf("%d\n",hu.age);
}
[/code]
構造体のメンバを関数で初期化・・・
Re: 構造体のメンバを関数で初期化・・・
構造体のメンバーではない、単なるint型の変数を初期化するような
input関数のコードは書けますか?
input関数のコードは書けますか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 構造体のメンバを関数で初期化・・・
素早いお返事ありがとうございます。
おっしゃられた関数くらい・・・と思って書いてみたのですが・・・やはり同じようにダメです。
今気づいたのですが、値渡しをしてるので、元の変数には影響を及ぼさない、つまり初期化できていないということでしょうか?
おっしゃられた関数くらい・・・と思って書いてみたのですが・・・やはり同じようにダメです。
今気づいたのですが、値渡しをしてるので、元の変数には影響を及ぼさない、つまり初期化できていないということでしょうか?
Re: 構造体のメンバを関数で初期化・・・
さようでございます。syosinsya さんが書きました: 今気づいたのですが、値渡しをしてるので、元の変数には影響を及ぼさない、つまり初期化できていないということでしょうか?
ていうか、C言語の関数はすべて値渡しです。
その値が、即値なのかはたまた即値ではなくて別の種類の値(今回必要なのはたぶんこちら)なのか、
ということです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 構造体のメンバを関数で初期化・・・
もしコメントいただけなければ、構造体に問題が・・・と勘違いしてずっと先に進めないところでした。
助言を踏まえたうえで、最初のプログラムについても考えてみます。
本当に助かりました。ありがとうございます。
助言を踏まえたうえで、最初のプログラムについても考えてみます。
本当に助かりました。ありがとうございます。
Re: 構造体のメンバを関数で初期化・・・
ちなみに解決したコードは以下の通りです。
関数内で値を変えると呼び出し元の変数の中身も変わるように、引数をただの構造体変数からポインタ変数にすることで解決しました。
関数内で値を変えると呼び出し元の変数の中身も変わるように、引数をただの構造体変数からポインタ変数にすることで解決しました。
#include<stdio.h>
typedef struct{
int age;
}human;
void input(human *hu); //←引数をポインタ変数に変更
void output(human hu);
int main()
{
human hu ;
human *phu;
phu = &hu;
input(phu); //アドレスで呼び出す
output(hu);
return 0;
}
void input(human *hu){ //←引数をポインタ変数に変更
hu->age =5; //->記号を使ってアクセス
}
void output(human hu){
printf("%d\n",hu.age);
}
Re: 構造体のメンバを関数で初期化・・・
まあこれでもいいのかもしれませんが、どうせならphuを使わずに
と書く方が簡単でありましょう。参考までに。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。