期末試験
Posted: 2016年1月24日(日) 21:18
至急お願いします。
期末試験の過去問からの質問です。
名前と3科目の点数を読み込むプログラムを作っています。
以下のプログラムでデバッグしたところ、配列またはポインタでない変数に添字が使われましたというエラーが出ます。
これの原因が分かりません。
C言語については基本的なことも理解できてないです。
また、パソコン自体も全く使いこなせません。
そのため、申し訳ありませんが、フォーラムルールを読んでも、codeの使い方が理解できなかったため、そのまま貼り付けさせていただきます。
#include<stdio.h>
#define NUM 6
#define CNUM 20
typedef struct exam {
char name[CNUM];
int score;
int sum;
}exam;
int read(exam data[NUM]) {
FILE *fp;
int i, j;
fp = fopen("test.txt", "r");
if (fp = NULL) {
printf("ファイルをオープンできませんでした\n");
return 1;
}
for (i = 0; i < NUM; i++) {
exam;
data[i].sum = 0;
for (j = 0; j < 3; j++) {
fscanf(fp,"%s",data[i].name[i]);
fscanf(fp,"%d",&data[i].score[i]);
}
}
fclose(fp);
return 0;
}
void sort(exam data[NUM]) {
exam tmp;
int i, j;
for (i = 0; i < NUM - 1; i++) {
for (j = 0; j<NUM - 1;j++) {
if (data[j].score>data[j + 1].score) {
tmp = data[j];
data[j] = data[j + 1];
data[j + 1] = tmp;
}
}
}
}
int main(void) {
int i;
int res;
exam data[NUM];
res = read(data);
if(res==1)
{
return 1;
}
sort(data);
for (i = 0; i < NUM; i++) {
printf("%d番 : %s %d点\n",i+1,data[i].name,data[i].sum);
}
getchar();
getchar();
return 0;
}
読み取りファイル test.txt
ames 67 87 97
tom 65 54 87
jane 98 67 87
judy 87 65 95
gerorge 76 77 78
emily 78 98 76
期末試験の過去問からの質問です。
名前と3科目の点数を読み込むプログラムを作っています。
以下のプログラムでデバッグしたところ、配列またはポインタでない変数に添字が使われましたというエラーが出ます。
これの原因が分かりません。
C言語については基本的なことも理解できてないです。
また、パソコン自体も全く使いこなせません。
そのため、申し訳ありませんが、フォーラムルールを読んでも、codeの使い方が理解できなかったため、そのまま貼り付けさせていただきます。
#include<stdio.h>
#define NUM 6
#define CNUM 20
typedef struct exam {
char name[CNUM];
int score;
int sum;
}exam;
int read(exam data[NUM]) {
FILE *fp;
int i, j;
fp = fopen("test.txt", "r");
if (fp = NULL) {
printf("ファイルをオープンできませんでした\n");
return 1;
}
for (i = 0; i < NUM; i++) {
exam;
data[i].sum = 0;
for (j = 0; j < 3; j++) {
fscanf(fp,"%s",data[i].name[i]);
fscanf(fp,"%d",&data[i].score[i]);
}
}
fclose(fp);
return 0;
}
void sort(exam data[NUM]) {
exam tmp;
int i, j;
for (i = 0; i < NUM - 1; i++) {
for (j = 0; j<NUM - 1;j++) {
if (data[j].score>data[j + 1].score) {
tmp = data[j];
data[j] = data[j + 1];
data[j + 1] = tmp;
}
}
}
}
int main(void) {
int i;
int res;
exam data[NUM];
res = read(data);
if(res==1)
{
return 1;
}
sort(data);
for (i = 0; i < NUM; i++) {
printf("%d番 : %s %d点\n",i+1,data[i].name,data[i].sum);
}
getchar();
getchar();
return 0;
}
読み取りファイル test.txt
ames 67 87 97
tom 65 54 87
jane 98 67 87
judy 87 65 95
gerorge 76 77 78
emily 78 98 76