ページ 1 / 1
関数の扱い方に関する質問です
Posted: 2009年8月05日(水) 02:34
by mint
Aという関数を作って、メイン関数内の時刻t(0から100)において10おきにplanという変数を変えるプログラムをつくっています。
しかし、メイン関数内の、if(plan == 2){printf("実行\n");}の部分が無視されてしまいます。(関数A内で使ったplanという変数はメイン関数では使えないのですか??)planが2の時に実行と表示させたいのですが、良い方法はありませんでしょうか?どうかよろしくお願いします。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int A(int ,int);
int main()
{
int t=0,plan;
for(t=0;t<100;t++){
A(t,plan);
if(plan == 2){printf("実行\n");}
}
return 0;
}
int A(int t,int plan)
{
if(t % 20 < 10)
plan = 1;
else
plan = 2;
}
Re:関数の扱い方に関する質問です
Posted: 2009年8月05日(水) 03:21
by sizuma
<tt>
>関数A内で使ったplanという変数はメイン関数では使えないのですか??
使えないです。
mintさんが作った関数はint型を返す関数なのに何もreturnしてないですよね。
これは明らかにおかしいです。
とりあえずおかしいところを。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int A(int ,int);
int main()
{
int t=0,plan;
for(t=0;t<100;t++){
A(t,plan); //初期化してないplanを関数に渡してる
if(plan == 2){printf("実行\n");}
}
return 0;
}
int A(int t,int plan)
{
if(t % 20 < 10) //スコープがかかれてない。コレ→{ }
plan = 1; //1行なんで動くけど、行を変えるなら囲まないと見づらい。
else
plan = 2;
}
関数Aの仮引数をplanにすると分かりにくくなりますね。
int A(int t,int piyo);
int main()
{
int t=0,plan = 0;
for(t=0;t<100;t++){
plan = A(t,plan); //関数からの戻り値をplanに代入してチェックすればOK
if(plan == 2){printf("実行\n");}
}
return 0;
}
int A(int t,int piyo) //変数名を変えた。piyoはmainからは使えない
{
if(t%20 < 10){
piyo = 1;
}else{
piyo = 2;
}
}
</tt>
ちょっとだけ修正してみました。Aが何を返すのかは考えてみてください。
Re:関数の扱い方に関する質問です
Posted: 2009年8月05日(水) 03:59
by sizuma
>Aという関数を作って、メイン関数内の時刻t(0から100)において10おきにplanという変数を変えるプログラム
こういう課題でしょうか?
この文章を見て作ろうと思うと、planのポインタを渡してAの関数で変える方がいいと思いますが。
#include<stdio.h>
void A(int t,int *p_plan);
int main()
{
int t;
int plan = 0;
int *p_plan;
p_plan = &plan;
for(t=0;t<100;t++){
A(t,p_plan);
if(plan == 2)printf("t=%d plan=%d 実行\n",t,plan);
}
return 0;
}
void A(int t,int *p_plan)
{
if(t%20 < 10){
*p_plan = 2;
}else{
*p_plan = 0;
}
}
mainはこう書いた方がすっきりするかな
int main()
{
int t;
int plan = 0;
for(t=0;t<100;t++){
A(t,&plan);
if(plan == 2)printf("t=%d plan=%d 実行\n",t,plan);
}
return 0;
}
Re:関数の扱い方に関する質問です
Posted: 2009年8月05日(水) 08:10
by toyo
別の掲示板で解決したようです
せっかくの回答が無駄になるのでマルチポストはやめて欲しいですね
Re:関数の扱い方に関する質問です
Posted: 2009年8月05日(水) 11:00
by sizuma
>toyoさん
教えてくださってありがとうございます。
確かに回答して反応がないのは寂しいですが、回答のために問題を考えるのは間違わないようにしなくてはいけないしすごいいい勉強になります。まだまだ僕が初心者なので。
>マルチポスト
勉強するためじゃなくて課題を終わらせたいだけなら、そう書いてくれればこっちも返信しないのに・・・
明らかに基礎が出来てないから、回答にも気を使ったんですけどね。
がんばって勉強中だけど分からないのか、勉強する気がないのかの判断はしにくいですからどうしたものか。
っと、脱線失礼しました