• ベストアンサー

C言語の自作関数について

自作関数が入ったcファイルをインクルードで呼び出し、実行しようと思っています。しかし自作関数を呼び出す前に、scanfやprintfを入れると、関数が上手く機能しません。入れなければ、ちゃんと機能します。 原因が分かりません。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • chirubou
  • ベストアンサー率37% (189/502)
回答No.4

mfig() で b の値がちゃんと初期化されていないのが原因で、scanf() 等のせいではないですね。 ちなみに私だったら、 int mfig(int a) [ int s = 0; while(a>0){ a /= 10; s++; } return s; } とします。 でもやっぱり基本は分割コンパイルでしょう。それと #include <stdio.h> は main 関数のファイルにいれるべきでしょう。

rigard1225
質問者

お礼

ありがとうございます。できました。 mfig関数参考になりました。すっきりしてますね。

その他の回答 (3)

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.3

この場合に使うのは「インクルード」ではなく「分割コンパイル」ではないでしょうか。 「分割コンパイル」でGoogle検索して調べてください。

rigard1225
質問者

お礼

ありがとうございます。できました。

  • SafeGuard
  • ベストアンサー率33% (4/12)
回答No.2

ソース見てないので何ともいえませんが用は 標準出力,入力の関数を使用するとおかしくなるってことなので #include <stdio.h> が抜けてるのでは?

rigard1225
質問者

お礼

ありがとうございます。 下記のNO.1さんのお礼に載せたmyfuc.cに#include <stdio.h>を入れましたが、結果は同じでした。

noname#20242
noname#20242
回答No.1

質問がアバウトすぎます。 せめて問題となるソースを載せてほしいところですね。

rigard1225
質問者

お礼

すいません。どこまで、載せていいものか迷ったもので・・・。下記に載せます。桁数を数えるプログラムです。 //自作関数が入った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です。 となります。 お願いします。

関連するQ&A