- 締切済み
関数内で数値入力したときの戻り値は?
数値を入力して変数に格納する、という作業を複数回繰り返すような数値入力のための関数をつくったとします。そのような場合、関数の宣言や戻り値はどのようにすればよいのでしょうか? グローバル変数を用いたときにはうまくいったのですが、ローカル変数にかえようとしたらmain関数の中で値が割り当てられていません、となってしまいました。 教えてください。お願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10359)
こんな感じでしょうか。getnumはエラーが無ければ1エラーがあれば0を返します。入力された数値(ここではintと仮定)は、引数で指定します。 int getnum(int *n) { char buf[1000]; if( fgets(buf,sizeof buf,stdin) ){ if( sscanf(buf,"%d",n)==1 ) { return 1; } } return 0; } main() { int x,y; ....... if( getnum(&x) ) { 数値入力が成功して x に値が入っている場合の処理; }else{ 何らかのエラーがあった場合の処理; } ....... if( getnum(&y) ) { ....... }
- yamada46
- ベストアンサー率39% (13/33)
>グローバル変数を用いたときにはうまくいったのですが このソースを提示していただければ、皆さんもアドバイスしやすいかと思いますよ。質問からは、どうしたいかがイマイチ明確ではないので。 質問から想像するに、mainで宣言した変数に関数内で値を設定したいって事ですか?
- uninin
- ベストアンサー率20% (26/129)
正直、問題を把握してないので外しているのかも知れませんが、staticな変数の使い方の例です。 scan使うなとかいう突っ込みはご容赦を。 hoge()内の変数aは呼び出すたびに初期化はなされません。 int hoge(){ auto int x; static int a; scanf("%d",&x); a = a + x; return a; } int main(){ auto int i; for(i=0; i<10; i++){ printf("sum: %d\n",hoge()); } }
- uninin
- ベストアンサー率20% (26/129)
staticで静的変数として宣言してはいかがでしょうか?
- Tsukasa0215
- ベストアンサー率22% (280/1257)
#include <stdio.h> int func(int a,int b) { return(a+b); } void main(void) { int a,b,i,ans; for(i=0;i<3;i++) { scanf("%d,%d",a,b); ans=func(a,b); printf("%d",ans); } } 関数からの戻り値は、変数に退避(代入)するか、他の関数に引数として渡すか…どちらかになると思います。 上記のプログラムで言うと… ansが関数の戻り値を受け取る変数です。 この変数を使わずに足し算の結果を表示しようとすると次の様になります。 printf("%d",func(a,b)); ※オート変数は関数内に入った時に領域確保されますが、その関数から抜けると消滅すると思って下さい。グローバル変数はプログラムが終了する迄メモリ上に存在するので、出来る限り使わない様なプログラムを作成する様にすればいいです。
補足
質問の仕方が悪くてすみません; この例でいうと、func()という関数の中でscanfを使う感じなのですが…お願いします。
補足
ビルドのエラーは消えたのですが、実行がうまくいきません。正しい使い方を詳しく教えていただけないでしょうか?