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

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

int main()
{
int i;
double x;
double y;
double z;
double x1;
double x2;


FILE *fp;
char fname[256];


printf("Output file name?");
scanf("%s", fname);
fp = fopen(fname, "r");

if(fp == NULL)
{
printf("%s file not open!\n", fname);
return -1;
}


while(fscanf(fp, "%lf, %lf", &x, &y) != EOF)
{
printf("%lf, %lf\n", x, y);

}
}



x₁ y₁
x₂ y₂

と並んだファイルを読み込んで表示させたいのですが
実行結果、
x₁ 0.0000
y₁ 0.0000
x₂ 0.0000
y₂ 0.0000

と謎の0.0000が入ってきてうまく表示できません。


どのようにすれば0.0000を読み込ませず、表示できるでしょうか。


(ちなみに空白を外しても同じでした。)

A 回答 (3件)

scanf 系の書式文字列では, % ではじまる部分は (%% 以外) 変換指示としてしかるべく入力を読み込むが, それ (と空白文字) 以外は


その文字がそこにある
ことを期待する. なので, その文字がそこになかったら読み込みをそこで打ち切る.
https://en.cppreference.com/w/c/io/fscanf

返り値を確認していればわかるんだけどね.
    • good
    • 0
この回答へのお礼

まだ学び始めたてなので大変参考になりました。
これから気をつければと思います。
大変有難うございました。

お礼日時:2020/06/25 02:26

x₁ y₁


x₂ y₂

ファイルの内容がこれならスペースで区切られているので
fscanf(fp, "%lf, %lf", &x, &y)
 ここを
fscanf(fp, "%lf %lf", &x, &y)
に変更したら読み込めませんか?
    • good
    • 1
この回答へのお礼

夜分遅くに有難うございます。
確かにそのようにして「,」を外せば上手く表示できました!!!有難うございます!

お礼日時:2020/06/25 02:25

具体的にはどういう内容のファイルを読み込ませてどういう出力になったんでしょうか? このプログラムで


x₁ 0.0000
y₁ 0.0000
x₂ 0.0000
y₂ 0.0000
という出力が*本当に*得られるはずはないですよね.

ところで「Output file name?」と聞いておきながらそこで与えるのが「入力のファイル名」ってのはどうなんだろう.
    • good
    • 0
この回答へのお礼

夜分遅くに回答有難うございます!
具体的には
0.1 5.9
0.2 6.9
0.3 7.9
0.4 8.9
0.5 9.9
といったような数値でした。

「」の部分は表にある数値を参考にして計算を行い出力させたいということなので、「数値参考するファイル名」と言うことで「output云々」にしてありました。
別段計算結果はそのファイルに再入力させるつもりはありませんでした。

ただ幾つか思考している内に
while(fscanf(fp, "%lf, %lf", &x, &y) != EOF)
{
printf("%lf, %lf\n", x, y);

の部分の3行目のprintf(“%lf,
の「,」が原因であったのがわかりました。

この「,」が 実際にどんな働きを行っていたか教えていただければ幸いです。

お礼日時:2020/06/25 01:49

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