![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
テキストファイルをうまく読み込んでくれません。
どうかご教示お願いいたします。
環境
Windows7
Borland C++ 5.5.1 for Win32
status.txtの内容
1.50,40.0
1.55,45.0
1.60,50.0
1.65,55.0
1.70,60.0
1.75,65.0
1.80,70.0
1.85,75.0
1.90,80.0
プログラムの内容
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
FILE *filepointer;
double s[10],w[10];
int i=0,ret;
if((filepointer=fopen("status.txt","rt"))==NULL){
printf("file open error!!\n");
exit(1);
}
printf("%X\n",filepointer);
while((ret=fscanf(filepointer,"%f,%f",&s[i],&w[i]))==2){
i++;
printf("%d%f%f\n",ret,s[i],w[i]);
}
fclose(filepointer);
return 0;
}
出力結果
40E714
2 0.000000 0.000000
2 0.000000 0.000000
2 0.000000 0.000000
2 0.000000 0.000000
2 0.000000 0.000000
2 0.000000 0.000000
2 5.121811144940079976000000000000000000000e+303 0.000000
2 0.000000 0.000000
2 0.000000 0.000000
No.4ベストアンサー
- 回答日時:
while((ret=fscanf(filepointer,"%f,%f",&s[i],&w[i]))==2){
i++;
printf("%d%f%f\n",ret,s[i],w[i]);
}
ここのところを以下のようにしてください。
while((ret=fscanf(filepointer,"%f,%f",&s[i],&w[i]))==2){
printf("%d%f%f\n",ret,s[i],w[i]);
i++;
}
No.7
- 回答日時:
>しかし、なぜなのでしょうか?
1行ずつトレースしていけば判るかと思いますが……
ループ1回目(iの値は0)=>
while((ret=fscanf(filepointer,"%f,%f",&s[0],&w[0]))==2){
->ということでs[0]とw[0]に読み込み。
i++;
->iがインクリメントされて1になる。
printf("%d%f%f\n",ret,s[1],w[1]);
->値が未設定のs[1]とw[1]を表示する。
ループ2回目(iの値は1)=>
while((ret=fscanf(filepointer,"%f,%f",&s[1],&w[1]))==2){
->ということでs[1]とw[1]に読み込み。
(s[1]とw[1]の内容は更新されるが、表示済みの内容を書き換えてはくれない)
i++;
->iがインクリメントされて2になる。
printf("%d%f%f\n",ret,s[2],w[2]);
->値が未設定のs[2]とw[2]を表示する。
以下略。
No.5
- 回答日時:
ああ、確かにiのインクリメント位置がおかしいですな。
ツッコミサンクスです。>#4&#5
しかし…ローカル変数ですからゴミが出るかと思いきや、以外とまともな値(0)が表示されていますな。
まぁ、1箇所へんなの出ていますけど。
No.2
- 回答日時:
>while((ret=fscanf(filepointer,"%f,%f",&s[i],&w[i]))==2){
「scanf double」で検索すると……。
http://www.ei.fukui-nct.ac.jp/~t-saitoh/edu/Prog …
http://www9.plala.or.jp/sgwr-t/c/sec05.html#s5-3
などなど……。
%fではなく%lfを使用して下さい。
No.1
- 回答日時:
scanf系関数の「%f」は「float型」だよ。
質問者さんは、float型ではなく、double型の変数のポインタを指定してるよね?
「%f」を「%lf」にしてみよう。
これ、scanfの「基本中の基本」だから、こういう質問は「超恥ずい」っすよ。
この回答への補足
いろいろ書き換えてる間にdoubleに変えていることを忘れていました。
申し訳ないです。
floatに直した出力結果です。
40E714
2 0.000000 0.000000
2 0.000000 0.000000
2 0.000000 0.000000
2 0.000000 0.000000
2 168728878714947758600000000000000000000.0 0.000000
2 0.000000 0.000000
2 0.000000 0.000000
2 0.000000 0.000000
2 0.000000 0.000000
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
printf で二進表示を行いたい。
-
c言語でAからZまでを表示する...
-
srand(time(NULL))の使い方
-
C言語のじゃんけんゲームのプロ...
-
10進数を2進数に変換するには・...
-
困ってます!Cプログラミングに...
-
switch分のケースを範囲数?に...
-
scanfに文字が入力されたときに...
-
wsprintfの書式制御文字列につ...
-
摂氏の値を計算するプログラム...
-
C言語で、一桁の整数4つを、四...
-
c言語 プログラム ピラミッド
-
C言語について
-
じゃんけんゲームの応用
-
基本中の基本!?
-
C言語についてです 整数 nを入...
-
c言語プログラミングでアルファ...
-
3つの入力した数値の大小比較...
-
コンパイルエラーについて
-
球の体積と表面積を表示するプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
【C言語教えてください】sin波...
-
strcmp
-
コンパイルエラーについて
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
cshの文字列操作(0埋め)
-
4の倍数を論理演算で表す。。
-
C言語 プログラミング
-
8人分のテストの点数を入力し、...
-
%P と %X の違い
-
C言語での、年複利の計算方法...
-
printf( " %2d", p * q );
-
hit&bolwのプログラミングがで...
-
scanfに文字が入力されたときに...
-
error C2143: 構文エラー : ';'...
-
printfの出力内の文字をdefine...
-
テキストカーソル位置の取得
-
unsigned int型について
おすすめ情報