###課題
プログラミング初心者です。
C言語を授業で習ってるのですが、この問題をどうやれば良いのかさっぱりわかりません。
よろしくお願いします。
###問題
番号と緯度,経度のデータがある.これが数字,数字,数字の形式で格納されているファイル「sample.csv」を読み込み,キーボードから指定された番号のデータの緯度の値を表示するプログラムを作成せよ.
###補足
番号と緯度,経度のデータがある.これが数字,数字,数字の形式で格納されているファイル「sample.csv」を読み込み,キーボードから指定された番号のデータの緯度の値を表示するプログラムを作成せよ.
ファイルにデータは最大で7000行格納されているものとする.もしもマイナスの番号やデータ数以上の番号など存在しないデータの番号が指定された場合にはNGと表示する.なおファイル中の番号は飛び飛びに振られている.
プログラムの作成方針としては次の2つが考えられるが,どちらの方針で解答してもよい.
方針(1)として,7000行のデータを読み込んで配列に全部格納して,後から目的のデータを探す.
方針(2)として,データを一行読み込んだ時点で,そのデータが目的のものかどうか判定する.これをファイルの最後まで繰り返す
csv形式とは次のようにカンマで区切られたデータファイル(カンマ(C)セパレート(S)バリュー(V):「カンマで区切られた値」)のことを呼ぶ.
5,28.2811,34.05
6,28.2813,34.0498
7,28.2807,34.0498
このデータを1行読み込むには次のようにして,変数no,変数d1,変数d2にそれぞれ読み込むことができる.%lf項目と%lf項目の間にカンマが入る点に注意.
fscanf(fp, "%lf,%lf,%lf", &no, &d1, &d2)
余談: fscanfを使って素直に読み込めるCSVファイルは数値データ(%dや%lfなどで指定できるもの)だけである.数値以外のデータ(氏名などの文字列)が入ると,その項目を%sで取得しなければならなくなるが,scanfで文字列(%s)を指定するとカンマ記号も文字列の一部と勘違いされるため,うまく区切り位置を判断できなくなる.
###自分なりに作成したプログラム
♯include <stdio.h>
♯include<stdlib.h>
int main()
{
FILE *fp1;
double data[7000][3]={};
int i,j;
double n;
if((fp1=fopen("sample.csv","r"))==NULL){
printf("NG");
exit(1);
}
scanf("%lf",&n);
for(i=0;i<7000;i++){
for(j=0;j<3;j++){
if(fscanf(fp1,"%lf",&data[i][j])!='\0'){
}
}
}
for(i=0;i<7000;i++){
if(data[i][0]==n){
printf("%lf",data[i][1]);
break;
}
}
if(data[i][0]!=n){
printf("NG");
}
fclose(fp1);
return 0;
}