用C语言将文本基本转换为结构程序。为什么我总是得到奇怪的输出?

用C语言将文本基本转换为结构程序。为什么我总是得到奇怪的输出?,c,file,pointers,structure,C,File,Pointers,Structure,这是我的程序,你可以忽略主要部分: #include<stdio.h> #include<string.h> typedef struct{ char firstname[20]; char lastname[20]; int assignments[5]; int labs[5]; int midterm; int finalM; }myclass; myclass gng1105[10]; void update()

这是我的程序,你可以忽略主要部分:

#include<stdio.h>
#include<string.h>

typedef struct{
    char firstname[20];
    char lastname[20];
    int assignments[5];
    int labs[5];
    int midterm;
    int finalM;
}myclass;

myclass gng1105[10];
void update();
void printList();
void addStudent();
int main(){
    int option;
    update();
    while(option!= 3){
    printf("Please enter the option number:\n1.View the information for a specific    student\n2.add a student number\n3.Exist\n");
    scanf("%d", &option);
    if(option == 1){
        printList();
    }
    else if (option == 2){
    addStudent();
    }
    else if (option == 3){
        printf("system closed");
        break;
    }
    else{
         printf("invalid input");
    }

   printf("******************************************************************************\n");
    }
    return 0;
 }

void update(){
     FILE *fp;
    fp = fopen("myclass.txt", "r");
    int i = 0;
    if (fp == NULL)
        printf("Error opening file\n");
     else{
      while(!feof(fp)){
      fscanf(fp,"%s%s%d%d%d%d%d%d%d%d%d%d%d%d", gng1105[i].firstname, 
                                                gng1105[i].lastname,
                                                &gng1105[i].assignments[0],
                                                &gng1105[i].assignments[1],
                                                &gng1105[i].assignments[2],
                                                &gng1105[i].assignments[3],
                                                &gng1105[i].assignments[4],
                                                &gng1105[i].labs[0],
                                                &gng1105[i].labs[1],
                                                &gng1105[i].labs[2],
                                                &gng1105[i].labs[3],
                                                &gng1105[i].labs[4],
                                                &gng1105[i].midterm,
                                                &gng1105[i].finalM);
      i++;

      }
    }
    fclose(fp);

}

void printList(){
    int i;
    for(i = 0;i <10 ; i++){
        printf("%s %s %d %d %d %d %d %d %d %d %d %d %d %d", gng1105[i].firstname,
                                                            gng1105[i].lastname,
                                                            gng1105[i].assignments[0],
                                                            gng1105[i].assignments[1],
                                                            gng1105[i].assignments[2],
                                                            gng1105[i].assignments[3],
                                                            gng1105[i].assignments[4],
                                                            gng1105[i].labs[0],
                                                            gng1105[i].labs[1],
                                                            gng1105[i].labs[2],
                                                            gng1105[i].labs[3],
                                                            gng1105[i].labs[4],
                                                            gng1105[i].midterm,
                                                            gng1105[i].finalM);
    }

}


void   addStudent(){
}
这是输出,看起来很奇怪,甚至错误看起来不一致(无法发布图像抱歉):

马库斯·希尔100001 64 54 68 71 60 55 43 30 70 07081brian 0 0 0 0 0 0 0 0 0 0 0威利10002 90 96 89 91 93 90 85 95 100 90索伦·比尔格100003 70 84 74 75 90 81 70 0 77 8273800 0 0 0 0 0 0 0 0 0 0

(我突出显示了错误,除了那些该死的零)


如果有人能帮助我,我将不胜感激

看起来您在
结构中忘记了
studentId
字段。您正在将学生ID号(例如100001)分配给
gng1105[i]。作业[0]

您的
struct
的定义如下:

typedef struct
{
    char firstname[20];
    char lastname[20];
    int studentId; // <<<------ This is missing
    int assignments[5];
    int labs[5];
    int midterm;
    int finalM;
} myclass;
typedef结构
{
charfirstname[20];
char lastname[20];

int studentId;//您可能要做的第一件事是在
printf()的末尾添加
\n
格式化字符串,这样你的输出就可以被分成每条记录一行。这会有很大帮助。@user3064115你能发布新的输出吗?这是我的错误,现在好了……非常感谢!我现在感觉很傻……在这个愚蠢的小错误上花了一个小时。@user3064115有时你只需要另一双眼睛。很高兴我能帮上忙P
typedef struct
{
    char firstname[20];
    char lastname[20];
    int studentId; // <<<------ This is missing
    int assignments[5];
    int labs[5];
    int midterm;
    int finalM;
} myclass;
fscanf(fp,"%s%s%d%d%d%d%d%d%d%d%d%d%d%d%", gng1105[i].firstname, 
                                           gng1105[i].lastname,
                                           &gng1105[i].studentId, // <<<--- This is missing
                                           &gng1105[i].assignments[0],
                                           &gng1105[i].assignments[1],
                                           &gng1105[i].assignments[2],
                                           &gng1105[i].assignments[3],
                                           &gng1105[i].assignments[4],
                                           &gng1105[i].labs[0],
                                           &gng1105[i].labs[1],
                                           &gng1105[i].labs[2],
                                           &gng1105[i].labs[3],
                                           &gng1105[i].labs[4],
                                           &gng1105[i].midterm,
                                           &gng1105[i].finalM);
printf("%s %s %d %d %d %d %d %d %d %d %d %d %d %d %d", gng1105[i].firstname,
                                                       gng1105[i].lastname,
                                                       gng1105[I].studentId, // <<<--- Missing
                                                       gng1105[i].assignments[0],
                                                       gng1105[i].assignments[1],
                                                       gng1105[i].assignments[2],
                                                       gng1105[i].assignments[3],
                                                       gng1105[i].assignments[4],
                                                       gng1105[i].labs[0],
                                                       gng1105[i].labs[1],
                                                       gng1105[i].labs[2],
                                                       gng1105[i].labs[3],
                                                       gng1105[i].labs[4],
                                                       gng1105[i].midterm,
                                                       gng1105[i].finalM);