gpt4 book ai didi

c - 结构体时字符串重叠

转载 作者:行者123 更新时间:2023-11-30 20:33:54 26 4
gpt4 key购买 nike

我编写了一段代码来输入学生信息,如下所示。当学生 ID 附加姓氏时出现问题。我知道错误在于输入 ID 和姓氏,但我无法理解并修复它

#include "stdio.h"
#include "string.h"
typedef struct Fullname_s{
char Lastname[20];
char Fistname[10];
}Fullname;
typedef struct Birthday_s{
int Day,Month,Year;
}Birthday;
typedef struct Mark_s{
float mark[10];
}Mark;
typedef struct SV{
char ID[8];
Fullname F_name;
Birthday B_day;
char Sex[5];
Mark _Mark;
}sv;
sv s[100];
void inputsv(sv s[],int *n);
void printinfo(int i);
void output(sv s[],int n);
int main(){
int n;
inputsv(s,&n);
output(s,n);
}

void inputsv(sv s[],int *n){
printf("--------Enter Students information--------\n");
printf("Enter number of students \n");
scanf("%d",n);
int i=0;
while(i<*n){
int x;
printf("-------------------------Student %d-------------------------- \n",i+1);
printf("ID Student : ");
fflush(stdin);
scanf("%s",&s[i].ID);
gets();
printf(" Lastname : ");
fgets(s[i].F_name.Lastname,20,stdin);
printf(" Fistname : ");
gets(s[i].F_name.Fistname);
do{
puts("Enter 0 :MALE");
puts("Enter 1 :FEMALE");
scanf("%d",&x);
if(x==0)
strcpy(s[i].Sex,"MALE");
else
strcpy(s[i].Sex,"FEMALE");
}while(x!=0&&x!=1);
printf(" Birthday : ");
scanf("%d%d%d",&s[i].B_day.Day,&s[i].B_day.Month,&s[i].B_day.Year);
for(int j=0;j<10;j++){
printf(" Mark %2d:",j+1);
scanf("%f",&s[i]._Mark.mark[j]);
}
i++;
gets();
}
}

void output(sv s[],int n){
printf("STUDENTS INFORMATION \n");
for(int i=0;i<n;i++){
printf("--------------------\n");
printf(" STUDENT %2d\n",i+1);
printinfo(i);
printf("-------------\n");
}
printf("------------------------\n");
}

void printinfo(int i){
printf(" ID STUDENT :%s\n",s[i].ID);
printf(" FULLNAME :%s %s \n",s[i].F_name.Lastname,s[i].F_name.Fistname);
printf(" BIRTHDAY :%2d-%2d-%4d \n",s[i].B_day.Day,s[i].B_day.Month,s[i].B_day.Year);
printf(" SEX :%s\n",s[i].Sex);
for(int j=0;j<10;j++){
printf(" MARK %2d : %0.2f \n",j+1,s[i]._Mark.mark[j]);
}
}

如图所示错误,谢谢大家 enter image description here

最佳答案

请注意,s[i].ID 定义为char ID[8]。但是,输入的 ID 是 1234567b,它是 8 个字符。如果 id 应该是 1234567,那么您就忽略了输入结束字符串所需的 \0 NULL 字符。结果 printf("ID STUDENT :%s\n",s[i].ID);s[i].ID 的开头打印,直到第一个 NULL 字符(位于名称末尾)。

关于c - 结构体时字符串重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43745168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com