存储数据字符串C

时间:2013-12-04 02:31:18

标签: c arrays string char

[我用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”}

非常感谢。

2 个答案:

答案 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] =成绩;