- ベストアンサー
C言語の自作関数について
自作関数が入ったcファイルをインクルードで呼び出し、実行しようと思っています。しかし自作関数を呼び出す前に、scanfやprintfを入れると、関数が上手く機能しません。入れなければ、ちゃんと機能します。 原因が分かりません。お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
mfig() で b の値がちゃんと初期化されていないのが原因で、scanf() 等のせいではないですね。 ちなみに私だったら、 int mfig(int a) [ int s = 0; while(a>0){ a /= 10; s++; } return s; } とします。 でもやっぱり基本は分割コンパイルでしょう。それと #include <stdio.h> は main 関数のファイルにいれるべきでしょう。
その他の回答 (3)
- Trick--o--
- ベストアンサー率20% (413/2034)
この場合に使うのは「インクルード」ではなく「分割コンパイル」ではないでしょうか。 「分割コンパイル」でGoogle検索して調べてください。
お礼
ありがとうございます。できました。
- SafeGuard
- ベストアンサー率33% (4/12)
ソース見てないので何ともいえませんが用は 標準出力,入力の関数を使用するとおかしくなるってことなので #include <stdio.h> が抜けてるのでは?
お礼
ありがとうございます。 下記のNO.1さんのお礼に載せたmyfuc.cに#include <stdio.h>を入れましたが、結果は同じでした。
質問がアバウトすぎます。 せめて問題となるソースを載せてほしいところですね。
お礼
すいません。どこまで、載せていいものか迷ったもので・・・。下記に載せます。桁数を数えるプログラムです。 //自作関数が入ったmyfuc.c int mfig(int); int mfig(int a){ int b,i=10,s=0; while(b>0){ b=a/i; i=i*10; s++; } return s; } //mainファイル(成功) #include<stdio.h> #include"myfuc.c" int main(void){ int a,b; a=100; b=mfig(a); printf("桁数は%dです。",b); } 表示結果: 桁数は3です。 //mainファイル(失敗) int main(void){ int a,b; printf("整数入力:"); scanf("%d",&a); b=mfig(a); printf("桁数は%dです。",",b); } 表示結果: 整数入力:100 桁数は0です。 となります。 お願いします。
お礼
ありがとうございます。できました。 mfig関数参考になりました。すっきりしてますね。