dポイントプレゼントキャンペーン実施中!

for文でまわして求められた値をバイナリファイルに落としたく、下記のようなプログラムを書いたのですがうまくいきません。fwriteをretfunc中で行えばうまくいくと思うのですが、retfuncは実際は複雑なので、下位関数で計算だけを行い、mainでは戻り値を随時バイナリファイルに書き込むだけの処理にしたいです。
質問(1) 下記プログラムだとfor文がまわりません。勝手にループして欲しいだけなので引数はなくvoidとしてみましたが問題ないでしょうか?
質問(2)どうしたらループするでしょうか?
質問(3)fwriteの使い方はあってますか?サイズは1バイトで一個ずつの書き込みです。
※参考書を元にやっているため体系的に理解してないことも多いです。
ご教授よろしくお願いします。


#include <stdio.h>
#include <stdlib.h>

int retfunc (void)
{
int acnt,bcnt;
int srout;

for ( bcnt=0; bcnt<10; bcnt++) {
for ( acnt=0; acnt<10; acnt++)
srout=いろいろな処理;
return srout ;
}
}

main (int argc, char *argv[])
{
int srout;
FILE *FPo;

FPo = fopen("out.bmp","wb");
if ( FPo == NULL )
{
puts("Can't open out.bmp!");
return 1;
}
srout =retfunc();
fwite(&srout,1,1,fpo);
}

A 回答 (2件)

ループを抜ける原因は#1の方が回答しているので


どう作れば良いか、を回答します。

まずループ分は呼び出し側に置きましょう。
for(){
for(){
srout = retfunc();
fwrite();
}
}

って事ですね。んでこの場合acntとbcntをどうするか、って問題があって、

(1)retfunc()に引数を持たせたくない場合
・acnt,bcntをグローバルに置く
・retfunc()内でスタティック変数として扱う

(2)retfunc()に引数を持たせても良い場合
・acnt,cntを引数で渡しましょう

んでfwrite()の使い方ですが、ずばり間違っています(動く事は動きますが、処理系によってはバグを招きます)。関数リファレンスをよく読んでください。第二引数は何と書いていましたか?
    • good
    • 0
この回答へのお礼

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

>まずループ分は呼び出し側に置きましょう。
でだいぶ解決しました。

fwriteもsizeofで適切に処理することにしました。

お礼日時:2005/12/01 14:14

return srout ;


が、forループの中にあったらbcntの方はまわらなくて当然です。

この回答への補足

早速のご回答ありがとうございます。

そうするとどうしたらよいでしょうか?
ループの外に出すわけにもいかないですし・・・
根本的に構成を変えなければならないでしょうか?

補足日時:2005/11/24 15:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!