CSVを構造体に読み込みたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
こんぺいとう
記事: 12
登録日時: 1年前

CSVを構造体に読み込みたい

#1

投稿記事 by こんぺいとう » 4ヶ月前

[1] 質問文
  学校の課題です。よろしくお願いします。ほんとに全然わからないんです。
 [1.1] 自分が今行いたい事は何か
  国名と人口が空白で区切られたCVSファイルを、構造体に読み込んで、人口の平均とかを出したい。
 [1.2] どのように取り組んだか(プログラムコードがある場合記載)

コード:

#include <stdio.h>
#include <string.h>
int main(void){
  struct _pref{
    char name[50];
    int  population;
  };
  typedef struct _pref PREF;

  int i=0;
  char p;
  PREF name[50];
  PREF population;

  FILE *fp;
  char *filename="population.csv";
  fp=fopen(filename,"r");
  if(fp==NULL){
    printf("オープン失敗\n");
    return 0;
  }

  while(fscanf(fp,"%s %s",name,p)!=EOF){
    population=atoi(p);
    printf("%s %d",name,population);
  }
  fclose(fp);
  return 0;
}
 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
  24:error: incompatible types in assignment
  というエラーが出ます。
 [1.4] 今何がわからないのか、知りたいのか
  エラーの意味と原因、プログラムの改善点です。構造体がそもそもあんまりよくわからないし
  なぜ人口をはじめから数値で読み込めないのかも知りたいです。

[2] 環境  
 [2.1] OS : Windows10
 [2.2] コンパイラ名 : gcc

よろしくお願いします。

こんぺいとう
記事: 12
登録日時: 1年前

Re: CSVを構造体に読み込みたい

#2

投稿記事 by こんぺいとう » 4ヶ月前

なんか自力で解決できました。以下コードです。

コード:

#include <stdio.h>
#include <string.h>
#include <math.h>
struct _pref{
  char name[50];
  int  population;
};
typedef struct _pref PREF;

double hensa(double n,double ave){
  double x;
  x=pow(n-ave,2);
  return x;
}

int main(void){
  int i=0;
  double sum=0,ave,hensas,bun;
  PREF PREF[47];
  FILE *fp;
  fp=fopen("population.csv","r");
  if(fp==NULL){
    printf("オープン失敗\n");
    return 0;
  }

  for(i=0;i<47;i++){
    fscanf(fp,"%s %d",PREF[i].name,&PREF[i].population);
    sum=sum+PREF[i].population;
  }
  ave=sum/47;
  for(i=0;i<47;i++){
    hensas=hensas+hensa(PREF[i].population,ave);
  }
  bun=hensas/47;
  printf("平均=%f\n",ave);
  printf("分散=%f\n",bun);
  fclose(fp);
  return 0;
}


返信

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