[C言語]構造体にファイルのデータを入れて表示させたいです
C言語でファイルのデータを構造体に入れたいです。
自分なりにコードを書いてみたのですがエラーが出て行き詰まってしまいました。
発生している問題・エラーメッセージ
last.c:31:10: warning: incompatible pointer to integer conversion assigning to 'char' from 'char [25]' [-Wint-conversion] line[1]= "2020,1,1,10.2,-10.2,10.2"; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~ last.c:45:14: warning: incompatible integer to pointer conversion passing 'char' to parameter of type 'char *'; take the address with & [-Wint-conversion] p = strtok(line[k],","); ^~~~~~~ & /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/string.h:90:20: note: passing argument to parameter '__str' here char *strtok(char *__str, const char *__sep); ^ last.c:75:12: warning: incompatible integer to pointer conversion passing 'char' to parameter of type 'char *'; take the address with & [-Wint-conversion] fgets( line[k] , sizeof(line[k]) , fp ); ^~~~~~~ & /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h:149:30: note: passing argument to parameter here char *fgets(char * __restrict, int, FILE *); ^ last.c:76:16: warning: incompatible integer to pointer conversion passing 'char' to parameter of type 'char *'; take the address with & [-Wint-conversion] p = strtok(line[k],","); ^~~~~~~ & /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/string.h:90:20: note: passing argument to parameter '__str' here char *strtok(char *__str, const char *__sep); ^ 4 warnings generated.
該当のソースコード
#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_CELLS (365 + 1) // セルの個数 typedef struct weather{ int year; int month; int day; double max_tem; double min_tem; double sum_rain; } std; //構造体変数の内容を表示 void printData(int i,std weather) { printf("number : %d\n",i); printf("year_month_day : %d %d %d\n",weather.year,weather.month,weather.day); printf("highest_temperature : %f\n",weather.max_tem); printf("lowest_temperature : %f\n",weather.min_tem); printf("1時間降水量の最大 : %f\n",weather.sum_rain); printf("\n"); } int main() { int i,j=1,k=1; //kはDataの数 FILE *fp; char line[MAX_CELLS]; char *p; line[1]= "2020,1,1,10.2,-10.2,10.2"; std weather[MAX_CELLS] = { { 0, 0, 0, 0.0, 0.0, 0.0 }, // iris[0] (ダミー) }; fp = fopen( "data.csv", "r"); if( fp == NULL ) { fprintf(stderr, "ファイルがオープンできません\n"); exit(1); } p = strtok(line[k],","); weather[k].year = atoi(p); j++; //1つ目のトークンを入力 //情報を読み込み終わるまでループ while(j<=6){ //2回目以降は第一引数はNULL p = strtok(NULL,","); if (p != NULL) { switch (j) { case 2: weather[k].month = atoi(p); case 3: weather[k].day = atoi(p); case 4: weather[k].max_tem = atof(p); case 5: weather[k].min_tem = atof(p); case 6: weather[k].sum_rain = atof(p); } j++; } } j = 1; for(k=2; feof(fp) == 0;k++){ fgets( line[k] , sizeof(line[k]) , fp ); p = strtok(line[k],","); weather[k].year = atoi(p); j++; //1つ目のトークンを入力 printf("%d",atoi(p)); //情報を読み込み終わるまでループ while(j<=6){ //2回目以降は第一引数はNULL p = strtok(NULL,","); if (p != NULL) { switch (j) { case 2: weather[k].month = atoi(p); case 3: weather[k].day = atoi(p); case 4: weather[k].max_tem = atof(p); case 5: weather[k].min_tem = atof(p); case 6: weather[k].sum_rain = atof(p); } j++; } } j = 1; printf("%d",k); } fclose( fp ); for(i = 1; i < k; i++) { printData(i, weather[i]); // std型の値を } // 関数 printData に渡す return 0; }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/16 11:57