構造体を使ったファイルの入出力

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

構造体を使ったファイルの入出力

#1

投稿記事 by りさ » 14年前

数値しか書かれていないデータがあります.
1 23.4 12.4
2 22.1 8.9
・・・・・・・

このデータを読み込み最高と最低を表示させるにはどうしたらいいでしょうか??

途中までやったのですがバグった感じになってしまいます.
このからどーしたらいいかもわかりません.

教えてください.

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

main(int ac,char *av[]){
FILE *fp;
int n[10];
int a=0;
int i;
double low[10],high[10];
double low1;
double high1;

fp = fopen(av[1],"r");
if(fp == NULL){
printf("%sファイルが開けません\n",av[1]);
exit(1);
}
while((fscanf(fp,"%d,%lf,%lf",&(n[a]),&(low[a]),&(high[a]))) != EOF){
printf("最低気温: %lf 最高気温: %lf \n",low[a],high[a]);
a++;
}
fclose(fp);
}

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

Re: 構造体を使ったファイルの入出力

#2

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

while((fscanf(fp,"%d %lf %lf",&(n[a]),&(low[a]),&(high[a]))) != EOF)
にかえればOK牧場。データの間のスペースが全角だったので、上のコードの
スペースも全角スペースです。もしデータのスペースが半角スペースだったら
上記コードのスペースも半角にしなきゃいけません

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 構造体を使ったファイルの入出力

#3

投稿記事 by h2so5 » 14年前

「バグった感じ」がどのような状態なのか具体的に教えてください。

1 23.4 12.4
2 22.1 8.9

最高と最低を表示とは、例えば上のようなデータであれば、
最高:23.4   最低:1
という結果を出せばよいということですか?

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

Re: 構造体を使ったファイルの入出力

#4

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

とりあえず知りたい事は
>このデータを読み込み最高と最低を表示させるにはどうしたらいいでしょうか??
ですよね?

>このからどーしたらいいかもわかりません.
このから、構造体を使ったファイルの入出力に発展させるんですよね?たぶん。
でも、このからどーしたらいいかもわからない事をどうしましょうと聞かれても
うまく答える事はできません。

りさ

Re: 構造体を使ったファイルの入出力

#5

投稿記事 by りさ » 14年前

バグった感じというのは、値が-34.4325433のようなあり得ない数値を表示してしまうことです。

1 23.4 12.4
2 22.1 8.9

最高 23.4   最低 1
となればいいです。

お願いします。

りさ

Re: 構造体を使ったファイルの入出力

#6

投稿記事 by りさ » 14年前

りさ さんが書きました:バグった感じというのは、値が-34.4325433のようなあり得ない数値を表示してしまうことです。

1 23.4 12.4
2 22.1 8.9

最高 23.4   最低 1
となればいいです。

なので条件文も入力しなければならないと思うのですが
どのようにつなげればいいのか教えてください。

お願いします。

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

Re: 構造体を使ったファイルの入出力

#7

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

(あたえられた)仕様をはっきり理解されていないようです。
データは1行に、整数(たとえば日付) 実数(その日の最高気温) 実数(その日の最低気温)
で書かれています。最低、最大は気温であって、整数は対象ではないと思いますよ。

テーマから推測すると構造体を使わなくてはならない、とか
配列から推測すると最大件数は10件である、とかいろいろ
制限事項、仕様があるはずですが
本当に
>1 23.4 12.4
>2 22.1 8.9

>最高 23.4   最低 1
>となればいいです。

であればよいですか?だとすれば配列も不要で以下の様に書けます。

コード:

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

main(int ac,char *av[]){
FILE *fp;
int		n;
double low;
double high;
double	minV=1.0E10 , maxV=-1.0E10;

	fp = fopen(av[1],"r");

	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",av[1]);
		exit(1);
	}

	while( fscanf(fp,"%d %lf %lf",&n,&low,&high) != EOF)
	{
		if (minV > n) minV= n;
		if (minV > low) minV= low;
		if (minV > high) minV= high;

		if (maxV < n) maxV= n;
		if (maxV < low) maxV= low;
		if (maxV < high) maxV= high;
	}
	printf("最低気温: %lf 最高気温: %lf \n",minV,maxV);
	fclose(fp);
}

りさ

Re: 構造体を使ったファイルの入出力

#8

投稿記事 by りさ » 14年前

何度もすいません.
さきほどの書き込みが間違っていました.

最低気温は 8.9 とならなければなりません.

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

Re: 構造体を使ったファイルの入出力

#9

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

いろいろ言いましたが、他に問題なければ、以下で完成です。

コード:

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

main(int ac,char *av[]){
FILE *fp;
int		n;
double low;
double high;
double	minV=1.0E10 , maxV=-1.0E10;

	fp = fopen(av[1],"r");

	if(fp == NULL)
	{
		printf("%sファイルが開けません\n",av[1]);
		exit(1);
	}

	while( fscanf(fp,"%d %lf %lf",&n,&low,&high) != EOF)
	{
		//if (minV > n) minV= n;
		if (minV > low) minV= low;
		if (minV > high) minV= high;

		//if (maxV < n) maxV= n;
		if (maxV < low) maxV= low;
		if (maxV < high) maxV= high;
	}
	printf("最高: %lf 最低: %lf \n",maxV,minV);
	fclose(fp);
}

閉鎖

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