並びかえ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
さき

並びかえ

#1

投稿記事 by さき » 14年前

ファイルの入出力をやっているのですが
以下のプログラムを作ってみました.

すると最高気温だけは表示されるのですが
最低気温と日付はエラーが発生して
上手く表示できません.

どこがおかしいのかわからないんで教えていただけないでしょうか?

コード:

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

main(int ac,char *av[]){
  FILE *fp;
  int n[10];
  int a=0;
  float low[10],high[10];
  float min,max;
  int day,d1,d2;

  fp = fopen(av[1],"r");
  if(fp == NULL){
    printf("%sファイルが開けません\n",av[1]);
    exit(1);
  }
  while((fscanf(fp,"%d %g %g",&(n[a]),&(low[a]),&(high[a]))) != EOF){
    int day,d1,d2;
    if(low[a] <= min){
      min=low[a];
      d1=n[a];
    }
    if(high[a] >= max){
      max=high[a];
      d2=n[a];
    }
    a++;
  }
   printf("日付:%d, 最低気温: %g度 \n",d1,min);
   printf("日付:%d, 最高気温: %g度 \n",d2,max);
   fclose(fp);
}
[\code]

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: 並びかえ

#2

投稿記事 by bitter_fox » 14年前

さき さんが書きました:ファイルの入出力をやっているのですが
以下のプログラムを作ってみました.

すると最高気温だけは表示されるのですが
最低気温と日付はエラーが発生して
上手く表示できません.

どこがおかしいのかわからないんで教えていただけないでしょうか?

コード:

  while((fscanf(fp,"%d %g %g",&(n[a]),&(low[a]),&(high[a]))) != EOF){
    int day,d1,d2;
  }
   printf("日付:%d, 最低気温: %g度 \n",d1,min);
   printf("日付:%d, 最高気温: %g度 \n",d2,max);

エラーが発生してというのはどういったエラーでしょうか?フォーラムルールには
フォーラムルール さんが書きました:3. どのようなエラーやトラブルで困っていて
とありますのでこれに従っていただきますようにお願いします。

また、int day, d1, d2;がループの中にあり、ループ毎に宣言されるので値の保持が出来ていません。
ループの外に出すなどしてください。

さき

Re: 並びかえ

#3

投稿記事 by さき » 14年前

以下の様に実行結果がでました.

日付:-1074478712, 最低気温: 3.99103e-34度
日付:7, 最高気温: 30.1度

アバター
bitter_fox
記事: 607
登録日時: 14年前
住所: 大阪府

Re: 並びかえ

#4

投稿記事 by bitter_fox » 14年前

よく見れば、ループ外で既に宣言されてますね。
ですので、ループ内の
int day, d1, d2;
は不要です。

また、max及びminが初期化されていません。

ですので、ループは次のようにすると良いでしょう。

コード:

while((fscanf(fp,"%d %g %g",&(n[a]),&(low[a]),&(high[a]))) != EOF){
	if(low[a] <= min || a == 0){
	min=low[a];
	d1=n[a];
	}

	if(high[a] >= max || a == 0){
	max=high[a];
	d2=n[a];
	}

	a++;
}

アバター
さかまき
記事: 92
登録日時: 14年前

Re: 並びかえ

#5

投稿記事 by さかまき » 14年前

http://dixq.net/forum/viewtopic.php?f=3&t=7680
こちらにお友達がいます。
入力ファイルの書式は向こうで見ているのでわかりましたが
普通はその書式もちゃんとかいて欲しいですね。
やはり構造体は使わなくてよいみたいですね。

それと、min、max という変数は使わないほうがよいですよ。
あと、変数dayは使われていません。

閉鎖

“C言語何でも質問掲示板” へ戻る