前提・実現したいこと
配列・ポインターに関するエラーについて
名前、学籍番号、数・英・物三教科の得点からなる構造体をファイルに読み込み、それを利用し平均点や成績順にソートする成績管理システムを作成中です。
ファイルを読み込む際のscanf、その後のprintf内のポインタにエラーが出ます。
プログラム作成が初めてで構造体の作成もこれであっているのかよくわかりません。
どなたかご教示ください。
(main関数内で定義しているアルファベットはこのプログラムの後の平均点などの処理に使うものです。)
発生している問題・エラーメッセージ
Main.c:39:46: error: subscripted value is not an array, pointer, or vector while(fscanf(fp,"%s %s %lf %lf %lf",a[i].name,a[i].number,&a[i].math,&a[i].eng,&a[i].phy)){ ~^~ Main.c:39:56: error: subscripted value is not an array, pointer, or vector while(fscanf(fp,"%s %s %lf %lf %lf",a[i].name,a[i].number,&a[i].math,&a[i].eng,&a[i].phy)){ ~^~ Main.c:39:69: error: subscripted value is not an array, pointer, or vector while(fscanf(fp,"%s %s %lf %lf %lf",a[i].name,a[i].number,&a[i].math,&a[i].eng,&a[i].phy)){ ~^~ Main.c:39:80: error: subscripted value is not an array, pointer, or vector while(fscanf(fp,"%s %s %lf %lf %lf",a[i].name,a[i].number,&a[i].math,&a[i].eng,&a[i].phy)){ ~^~ Main.c:39:90: error: subscripted value is not an array, pointer, or vector while(fscanf(fp,"%s %s %lf %lf %lf",a[i].name,a[i].number,&a[i].math,&a[i].eng,&a[i].phy)){ ~^~ Main.c:40:51: error: subscripted value is not an array, pointer, or vector printf("%-10s %-10s %5.1f %5.1f %5.1f\n",a[i].name,a[i].number,a[i].math,a[i].eng,a[i].phy); ~^~ Main.c:40:61: error: subscripted value is not an array, pointer, or vector printf("%-10s %-10s %5.1f %5.1f %5.1f\n",a[i].name,a[i].number,a[i].math,a[i].eng,a[i].phy); ~^~ Main.c:40:73: error: subscripted value is not an array, pointer, or vector printf("%-10s %-10s %5.1f %5.1f %5.1f\n",a[i].name,a[i].number,a[i].math,a[i].eng,a[i].phy); ~^~ Main.c:40:83: error: subscripted value is not an array, pointer, or vector printf("%-10s %-10s %5.1f %5.1f %5.1f\n",a[i].name,a[i].number,a[i].math,a[i].eng,a[i].phy); ~^~ Main.c:40:92: error: subscripted value is not an array, pointer, or vector printf("%-10s %-10s %5.1f %5.1f %5.1f\n",a[i].name,a[i].number,a[i].math,a[i].eng,a[i].phy); ~^~ 10 errors generated.
該当のソースコード
#include <stdio.h> #include<string.h> #include<math.h> #define NAME_LEN 128 #define NUM_LEN 64 #define NUMBER 5 /*学生を表す構造体*/ typedef struct{ char name[NAME_LEN]; //名前 char number[NUM_LEN]; //学籍番号 double math; //数学の得点 double eng; //英語の得点 double phy; //物理の得点 }Student; int main(void){ int a,b,c,d; int i=0; int cnt=0; double mave,eave,pave; //構造体作成 Student human[NUMBER]={ {"Shimizu","h741", 50.0,60.0, 70.0}, {"Mayu","h777", 60.0, 70.0, 80.0}, {"Momo","h500", 80.0, 80.0, 80.0}, }; /*ファイル読み込み*/ FILE *fp; if((fp = fopen("hw.dat","r"))==NULL){ printf("\aファイルをオープンできません。\n"); } else{ while(fscanf(fp,"%s %s %lf %lf %lf",a[i].name,a[i].number,&a[i].math,&a[i].eng,&a[i].phy)){ printf("%-10s %-10s %5.1f %5.1f %5.1f\n",a[i].name,a[i].number,a[i].math,a[i].eng,a[i].phy); i++; } fclose(fp); } return i; }
試したこと
自分が持っているC言語の教科書内のポインタと配列部分を読みましたがエラーの原因はわかりませんでした。
補足情報(FW/ツールのバージョンなど)
使用PCはWindows10でプログラム作成に使用しているのはpaiza.ioという無料サイトです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/08 18:00