こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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;
}

投稿日時 - 2009-10-07 07:22:01

QNo.5348081

すぐに回答ほしいです

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

(グローバル変数などの理由でしょうか?)
いわゆる変数のスコープ(有効範囲)の問題ですね。
関数内で宣言された変数はその関数内でしか有効でありません。(実際はもっと細かくブロック内のみで有効ですが)
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);

投稿日時 - 2009-10-07 09:17:59

お礼

php504 さん

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

投稿日時 - 2009-10-07 10:10:22

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

回答2さんの
> ポインタのポインタになる理由は調べてみてください。
の理由がよくわからないのですが・・
別にfpの値が変化するわけではないので、
(変化するのはfpが指しているFILE構造体領域です)

kiroku(fo,n,i);
で呼び出して
void kiroku(FILE *fo,int ki1,int ki2){
でパラメータを受けて
fprintf(fo,"%d-%d\n",ki1,ki2);
で全然問題ないと思います。

投稿日時 - 2009-10-07 08:59:56

お礼

Lchan0211 さん

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

投稿日時 - 2009-10-07 10:09:45

ANo.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;
}

投稿日時 - 2009-10-07 08:03:49

お礼

hiro_knighさん

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

投稿日時 - 2009-10-07 10:08:46

ANo.1

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

投稿日時 - 2009-10-07 07:56:35

お礼

Trick--o--さん

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

投稿日時 - 2009-10-07 10:07:51

あなたにオススメの質問