[我用C语言编写程序]
我想阅读包含StudentName,Score和Remarks
的txt文件txt文件的模式如下所示:
1,Adam Lambert,60,C
2,Josh Roberts,100,A
3,Catherine Zetta,80,B
我想将每个数据分别存储到数组
中所以我会有3个数组(用于存储StudentName,得分和成绩)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <math.h>
char* studName[99];
char* grade[99];
char* grades[100][10];
char buff[1024];
int scores[100];
int score;
int index;
int size;
int index = 0;
int sum = 0;
double average = 0;
int main()
{
FILE *file;
file = fopen("notepad.txt", "r");
if(file == NULL){
printf("Data does not Exist");
}
else {
while(((fgets(buff,1024,file))!=NULL))
{
size = strlen(buff);
buff[size] = 0;
sscanf(buff, "%d, %[^,],%d, %[^,]", &index, studName,&score, grade);
printf("Student Name: %s\n", studName);
printf("Score: %d\n", score);
printf("Remark: %s\n", grade);
scores[index-1] = score;
grades[index-1][10] = grade;
sum+=score;
index++;
}
}
fclose(file);
average = sum/index;
printf("\nThe total score of student is: %d\n", sum);
printf("\nThe sum of student is: %d\n", index);
printf("\nThe average of students' score is: %2f\n", average);
for(int i = 0; i<3; i++){
printf("Score: %d\n", scores[i]);
printf("\nThe Remark is: %s\n", grades[i][10]);
}
getch();
return 0;
}
上面的代码已成功将分数存储在int数组中。我在C中并不是很好,所以我不知道如何为StudentName和Grades存储char数组。
abovde代码给出的Grades存储结果只是txt文件的最后一个等级(在这种情况下是'B')。
请您告诉我,为了实现目标,我需要解决哪些问题?
我的目标基本上就是这样:
StudentName数组包含{“Adam Lambert”,“Josh Roberts”,“Catherine Zetta”}
分数数组包含{60,100,80}
等级数组包含{“C”,“A”,“B”}
非常感谢。
答案 0 :(得分:0)
试试这个:
float len=sizeof(string);
只是给你数组字符串的静态大小,它是一个20个指针的数组,每个指针是4个字节,20 * 4个字节= 80,这就是为什么它总是80个。
while (fgets(string[i], BUFSIZE, fp)) {
i++;
len+=strlen(string[i]);
string[i] = (char *)malloc(BUFSIZE);
}
如果你的recore大小是固定的,你可以使用这个: 其中fr是文件指针
fscanf(fr, "Index: %d StuName: %s Score: %d Grade: %s ", &index, sname, &score, grade);
答案 1 :(得分:0)
将studName和成绩从“char *”更改为“char”。你想要一个缓冲区,而不是一个指针数组。
在顶部添加: char * StudentName [100];
设置“得分”和“成绩”时添加:
StudentName [index-1] = strdup(studName);
同样更改以下行中的“10”,该数组仅为0-9。 成绩[index-1] [10] =成绩;