用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);