• ベストアンサー

C言語_関数宣言_fprintfです!お願いします!!

C言語(C言語_関数宣言_fscanf)に関する質問です。 main関数とは別に新しく自分で関数を定義しました。 (keisan関数とします。) keisan関数の中に「fprintf」を用いたのですが上手くいきません。 (printfは通常通りに働きます。) どのような理由が考えられるでしょうか? (グローバル変数などの理由でしょうか?) どうか,ご指導お願いします!! #include <stdio.h> void kiroku(int ki1,int ki2){ printf("%d-%d\n",ki1,ki2); fprintf(fo,"%d-%d\n",ki1,ki2); /*↑このfprintfです*/ } int main(){ char *fnmo="kiroku.txt"; FILE *fo; int n,i; // open files. fo = fopen(fnmo,"w"); if(fo==NULL) { printf("NG\n"); return 0; } // read and store. n=1; i=2; kiroku(n,i); // close files. fclose(fo); return 0; }

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.4

(グローバル変数などの理由でしょうか?) いわゆる変数のスコープ(有効範囲)の問題ですね。 関数内で宣言された変数はその関数内でしか有効でありません。(実際はもっと細かくブロック内のみで有効ですが) main( ){ }で宣言されたFILE *fo;はmain( ){ }の外では使えません。 グローバル変数はその有効範囲がソースファイル全体ということになります。 FILE *fo; をグローバル変数にすればできます。 引数で渡す場合も普通のポインタで問題ないのではないでしょうか。 void kiroku(FILE *fo,int ki1,int ki2){ printf("%d-%d\n",ki1,ki2); fprintf(fo,"%d-%d\n",ki1,ki2); } int main(){ kiroku(fo,n,i);

mykitune
質問者

お礼

php504 さん 無事コンパイルできました! ありがとうございました。 m(_ _)m

その他の回答 (3)

  • Lchan0211
  • ベストアンサー率64% (239/371)
回答No.3

回答2さんの > ポインタのポインタになる理由は調べてみてください。 の理由がよくわからないのですが・・ 別にfpの値が変化するわけではないので、 (変化するのはfpが指しているFILE構造体領域です) kiroku(fo,n,i); で呼び出して void kiroku(FILE *fo,int ki1,int ki2){ でパラメータを受けて fprintf(fo,"%d-%d\n",ki1,ki2); で全然問題ないと思います。

mykitune
質問者

お礼

Lchan0211 さん 無事コンパイルできました! ありがとうございました。 m(_ _)m

回答No.2

お疲れ様です。 貴方のソースをまともに動かそうと思うと以下になります。 ポインタのポインタになる理由は調べてみてください。 #include <stdio.h> void kiroku(FILE **fo,int ki1,int ki2){ printf("%d-%d\n",ki1,ki2); fprintf(*fo,"%d-%d\n",ki1,ki2); /*↑このfprintfです*/ } int main(){ char *fnmo="kiroku.txt"; FILE *fo; int n,i; // open files. fo = fopen(fnmo,"w"); if(fo==NULL) { printf("NG\n"); return 0; } // read and store. n=1; i=2; kiroku(&fo,n,i); // close files. fclose(fo); return 0; }

mykitune
質問者

お礼

hiro_knighさん 無事コンパイルできました! ありがとうございました。 m(_ _)m

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

kirokuの中でfoが定義されていない?

mykitune
質問者

お礼

Trick--o--さん 無事コンパイルできました! ありがとうございました。 m(_ _)m