ある100行の値がx列、y列の2列あるファイルを読み込んでそれを配列に入れ、yの最小値及びそれと同じ行にあるxの値を表示するプログラムを書きたいのですがy列の最小値を表示するプログラムを書き終えた所でコンパイルして実行してみると正しく値が表示されませんでした。それどころか実行するたびに値が変わってしまいます。どこがおかしいのかわからないため、ご指摘のほどよろしくお願いします。また、できれば同じ行にあるx列の値も表示させるプログラムを教えてください。
よろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
#define N 100
int main(void)
{
int x[N],i;
double y[N],min;
FILE *fp;
fp=fopen("book.dat","r");
if(fp==NULL){
puts("can't open file!");
exit(-1);
}
for(i=0;i<N;i++){
fscanf(fp,"%d %lf", &x[N],&y[N]);
printf("x=%d\n y=%lf\n",x[N],y[N]);
}
min=y[0];
for(i=1;i<N;i++){
if(y[i]<min) min=y[i];
}
fclose(fp);
printf("最小値:%lf\n",min);
return 0;
}
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
#4さんの、keep の案をお借りして、ループが一回で済む形にしてみました。
for( i=0; i<N; i++) {
fscanf(fp,"%d %lf", &x[i],&y[i]);
printf("x=%d\n y=%lf\n",x[i],y[i]);
if ( i==0 ) { // i が 0の時はmin と keepに配列の先頭を代入
min = y[0];
keep = x[0];
} else {
if ( min > y[i] ) { // i が 1以上の時は、min と y[i] の小さい方をmin に代入
min = y[i]; // その時のx[i]を保存
keep = x[i];
}
}
}
No.4
- 回答日時:
>>fscanf(fp,"%d %lf", &x[N],&y[N]);
fscanf(fp,"%d %lf", &x[i], &y[i]);
だね。上のだと常にx[100], y[100]に代入している。つまり、x[0~99], y[0~99]にはごみが入ってることになるから数値が変わってる。いっそセグッてくれたら分かりやすかったかも。
ついでに、最初に int keep; を宣言しておいて
if(y[i] < min){
min = y[i]
keep = x[i]
}
とすれば、同じ行のx列の値がkeepに保存されてるから
printf("x列:%d、最小値:%lf\n", keep, min);
とでもすればOK
No.3
- 回答日時:
> fscanf(fp,"%d %lf", &x[N],&y[N]);
> printf("x=%d\n y=%lf\n",x[N],y[N]);
Nって
#define N 100
で定義したマクロですから、100って定数ですよね?
No.2
- 回答日時:
>for(i=0;i<N;i++){
>fscanf(fp,"%d %lf", &x[N],&y[N]);
>printf("x=%d\n y=%lf\n",x[N],y[N]);
>}
ループして配列の各要素に読み込むはずなのに、常にx[N](というかx[10])に読み込んでますよ。ループ変数iは使わないの?
>min=y[i];
minに代入じゃなくて、iを代入するようにすればよいのでは?
最小値が入った添え字を格納するってことね。そうすると
>printf("最小値:%lf\n",min);
ここも少し変わるね。
No.1
- 回答日時:
>#define N 100
>fscanf(fp,"%d %lf", &x[N],&y[N]);
>printf("x=%d\n y=%lf\n",x[N],y[N]);
上記をよく見てよく考えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
Cでファイルの行数をカウントす...
-
構造体メンバの初期化
-
C言語のプログラムで、途中で止...
-
プログラミングの授業の課題です
-
C言語で複数列のデータを1列の...
-
fread(),fwrite()等について
-
[C]セグメンテーションエラー:...
-
#defineが使用するメモリ領域に...
-
C++で指定文字列のカウント方法...
-
printf による16進表示について
-
fscanfの使い方
-
マイナスからプラスへ転じた時...
-
「指定されたキャストは有効で...
-
数字以外が入力されたらエラー...
-
C言語で簡単なパックマンゲーム...
-
比較回数と交換回数表示について
-
C言語での引数の省略方法
-
2÷3などの余りについて
-
4の倍数を論理演算で表す。。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
C言語で複数列のデータを1列の...
-
#defineが使用するメモリ領域に...
-
printf による16進表示について
-
空白を含んだ文字列がうまく格...
-
C言語のプログラムで、途中で止...
-
プログラミングの授業の課題です
-
char型2つを結合し、short型に...
-
C言語でのCSVファイルの読み出...
-
矢印キーを押下してコンソール...
-
【C言語】全角文字の配列を、全...
-
エラーについて質問です。
-
リストの作成と出力(C言語)
-
バイナリファイル(画像)のよみ...
-
[C]セグメンテーションエラー:...
-
WinInetのInternetOpenUrl関数...
-
VC++でSQLへSELECT文を送ったの...
-
受信データから必要な部分のみ...
-
c言語で文書を読み込み、単語の...
-
reallocでエラー
おすすめ情報