前提・実現したいこと
fscanf構文を用いて数値を大きい順に並べるプログラムを作成したい。
発生している問題・エラーメッセージ
fscanfでファイル内の数値を読み込もうとした際に、最初の数値のみしか読みこんでくれず、数値を大きい順に並べることが出来ない。
該当のソースコード
#include <stdio.h> #include <stdlib.h> int main( void) { int i; int j; int k; double a[20]; FILE *fp; fp = fopen("xxxxxx.txt","r"); if (fp == NULL) { printf("ファイルが存在しません。\n"); exit (1); } fscanf( fp, "%lf", &a[i]); for ( i=0; i<20; i++ ){ for ( j=i+1; j<20; j++ ){ if (a[i] < a[j]){ k = a[i]; a[i] = a[j]; a[j] = k; } } } printf("トップ10は\n"); for ( i=0; i<10; i++ ){ printf("TOP %d: %f \n", i+1, a[i]); } return 0; fclose(fp); }
試したこと
根本として並べ替えをするソースコードが間違っているのかと思い、 double a[20] = {2.8, 10.4, 13.2, 6.0, .....}; としてファイルからの読み取りではなく入力した数値で並べ替えをしてみたのですが、その際はしっかりと並べ替えをしてくれました。
補足情報
読み込みたいテキストファイルの数値は
1.3
6.4
5.3
....
の様に1行ずつ改行して数値を入力してあります。
また、コンパイル時にエラー等は表示されません。
表示された実行結果
TOP 1: 1.300000
TOP 2: 0.000000
TOP 3: 0.000000
TOP 4: 0.000000
TOP 5: 0.000000
TOP 6: 0.000000
TOP 7: 0.000000
TOP 8: 0.000000
TOP 9: 0.000000
TOP 10: 0.000000
###教えて頂きたいこと
fscanfの使い方を学び、応用をしてみようと思いましたが意図した通りの挙動をしてくれませんでした。
どのように改善をしたら、fscanfが意図した通りに動くか教えて頂きたいです。
また、当サイトの使用が初めてで拙い質問方法であるかと思いますがどうかよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/26 08:29
2021/06/26 08:34
2021/06/26 08:41
2021/06/26 09:49
2021/06/26 10:03
2021/06/26 11:16