新生活を充実させるための「こだわり」を取材!!

以下でprintfで表示したときには0,1と正しい値が出るのに、
fprintfでファイルに入れ、エクセルで起こすと変な値が出ました。何が原因でしょうか?
int main(){
double x[2]={0};
x[0] = 1;
FILE *f;
f = fopen("example.txt", "w");
fprintf(f, "%lf %lf", 0, x[0]);
fclose(f);
printf("%lf", x[0]);
system("pause");
return 0;
}

質問者からの補足コメント

  • 再起動して再度試しましたが、変わらず
    0 -3.91985E+83
    と出ました。
    環境の違いでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/01/18 15:52
  • メモ帳でもだめでした。
    実行するたびに値が変わります。

      補足日時:2022/01/18 16:35
  • tatsumaru77様
    お寄せいただいたコードで実行しましたができませんでした。

      補足日時:2022/01/18 16:47
教えて!goo グレード

A 回答 (8件)

誤: fprintf(f, "%lf %lf", 0, x[0]);


正: fprintf(f, "%lf %lf", 0.0, x[0]);

%lf は long な float である double 型の値を期待します
0 だと int 型になるので、誤った出力になるのでしょう。
    • good
    • 0
この回答へのお礼

修正したところ正しい値が出ました。
ありがとうございます。

お礼日時:2022/01/19 06:29

#7 が正解. 値に対して書式が不適切なので「書いてある通り」に処理した結果あなたの目論見とは違うことになっている.



なおこれは「未定義動作」なので, 規格上何がどうなっても文句は言えない.
    • good
    • 0

No4,No5です。


>お寄せいただいたコードで実行しましたができませんでした。
double x[2] = { 0 };は
double x[2] = { 0,0 };
に修正されましたでしょうか。
    • good
    • 0
この回答へのお礼

お時間を割いていただきありがとうございました。

お礼日時:2022/01/19 06:31

一か所見落としていました。


double x[2] = { 0,0 };
にしてください。
double x[2] = { 0 };
だと、x[0]のみ0に設定されます。
    • good
    • 0

気になる個所を修正しました。


下記でどうなりますか。
#include <stdio.h>
#include <stdlib.h>
int main()
{
double x[2] = { 0 };
x[0] = 1;
FILE *f;
f = fopen("example.txt", "w");
fprintf(f, "%f %f\n", 0, x[0]);
fclose(f);
printf("%f\n", x[0]);
system("pause");
return 0;
}
    • good
    • 0

Excelは数値を15桁までしか扱えません。


その桁数を超えた数値で出力されているのだろうと予測してみます。

試しに「数値」ではなく、「文字列」として読み込んでみてください。
テキストファイルウィザードで、対象のフィールドを文字列にすることで
Excelがテキストを勝手に「数値」として読み取ってしまう事を防止できます。
    • good
    • 0

エクセルでなく、エディタかメモ帳で開いてみてください。


それでも0 -3.91985E+83とでますか。
    • good
    • 0

excelで開いた場合(上)と


エディタ(秀丸)で開いた場合です。
正しく書かれています。
「c言語で配列をfprintfで入力すると」の回答画像1
この回答への補足あり
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング