掲示板ランキング  プラスター(インドメタシン配合)  プラスター(伸縮タイプ)


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.7303

ファイルへの値の書き込み
投稿者---geography(2007/04/05 15:23:55)


こんにちは。2度目の書き込みになります。基本的な質問なのかもしれませんが、よろしくお願いします。

配列で計算した後で、その配列の値をファイルに書き込もうと思い、fprintfを使用して、書き込みを試みました。しかし、書き込んだ後でそのテキストファイルを開いてみると、全ての値が0になってしまいます。私のコードは以下のとおりです。

なお、設定した変数の意味は以下のとおりです。

fp_out;ファイルポインタ
nrows:配列の行数(6に設定してあります)
ncols:配列の列数(6に設定してあります)
a[][]:値が格納されている配列。値はdouble型です。
output.txt:アウトプット用のテキストファイル名


コード
fp_out = fopen("output.txt", "w");
//write the values to a file    
for(i=0; i<nrows; ++i){
    for(j=0; j<ncols; ++j){
        fprintf(fp_out, "%lf ", &a[i][j]);
    }
    fprintf(fp_out, "\n");  
}
fclose(fp_out);

このコードの直前にprintfでa[][]の値を表示した際は問題なく値が表示されていたのですが、テキストファイルに書き出したところ、全ての値が0になっていました。原因が何によるものかわからずにいます。もし解決策を教えていただけたら嬉しいです。よろしくお願いします。

なお、OSはWindows XP Professional(英語版)を使っており、コンパイラはVisual Studio 6.0(英語版)を使用しています。




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ファイルへの値の書き込み 7304 ありえないざ 2007/04/05 16:10:57
<子記事> Re:ファイルへの値の書き込み 7305 円零 2007/04/05 18:12:56


No.7304

Re:ファイルへの値の書き込み
投稿者---ありえないざ(2007/04/05 16:10:57)


>printfでa[][]の値を表示した際は問題なく値が表示されていたのですが
fprintf と同じ出力フォーマットですか?


この投稿にコメントする

削除パスワード

No.7306

Re:ファイルへの値の書き込み
投稿者---geography(2007/04/05 23:22:40)


ありえないざさん、ありがとうございます。

>>printfでa[][]の値を表示した際は問題なく値が表示されていたのですが
>fprintf と同じ出力フォーマットですか?

printfのほうはアドレスを使用していません。

printf("%lf", a[i][j]);

と記述しました。よろしくお願いします。


この投稿にコメントする

削除パスワード

No.7308

Re:ファイルへの値の書き込み
投稿者---geography(2007/04/05 23:32:22)


ありえないざさん、コメントをいただいてから、出力フォーマットをもう一度確認し、アドレス表示をやめ、普通の配列の表示にしたところ、値がちゃんと表示されました。つまり、

&a[i][j] → a[i][j]

へ変換をしました。単純なミスでしたが、fprintfを使うことが初めてであったので、ありえないざさんのコメントのおかげで解決することができました。たぶんこれで大丈夫だと思いますが、また何か問題がある場合は再び投稿させていただくかもしれません。本当にありがとうございました。感謝しています。


この投稿にコメントする

削除パスワード

No.7305

Re:ファイルへの値の書き込み
投稿者---円零(2007/04/05 18:12:56)


>fprintf(fp_out, "%lf ", &a[i][j]);

&a[i][j] は &(a[i][j]) と解釈されますから、
この場合、アドレスを表すビット列を無理やり浮動小数点数とみなしたものを表示しようとしていることになります。
多分 %lf を %e に変えるとゼロではない値が表示されますよ。

大事なことですが、printfはscanfとは違います。
そもそも、値を格納するのではなく表示するのに、値ではなくアドレスを要求するというのも変な話でしょ?
それにもしprintfがアドレスを要求する仕様であった場合、
printf("%d", 100)のようにリテラル値を表示することもできないし、
printf("%d", a + b)のように計算結果をそのまま表示するにも不都合が生じます。

さらに言えば、printfの場合、double型は%lfではなく%fで指定します。
アドバイス。関数は使う前に仕様を熟読すること。


この投稿にコメントする

削除パスワード

No.7307

Re:ファイルへの値の書き込み
投稿者---geography(2007/04/05 23:29:24)


円零さん、ありがとうございました。

たしかに、 %eとしたところ、値が表示されました。また、アドレス表示にせず、普通の値a[i][j]にしたら値が表示されました。単純なミスでしたが、この掲示板でのお答えによってそのミスに気づくことができました。

円零さんがおっしゃるとおり、今後は関数の仕様についてしっかりと確認をしてから投稿をしようと思います。本当にありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ