[英]How to add new a new structure student using pointers and dynamic memory
我當前的代碼接受用戶輸入並收集學生信息。 我正在嘗試編寫一個允許用戶添加新學生的功能。 我重新分配了內存並將所有內容傳遞給函數,但是當我編譯並運行程序時,它會為新學生輸出垃圾而不是新學生的詳細信息。 任何幫助表示贊賞。
結構
struct student
{
char fname[20];
char lname[20];
float score;
};
原型
void addStudents(struct student *s, int student_size);
主要
int main()
{
int base_number, i;
int students;
struct student *ptr;
printf("Enter Number of Students: ");
scanf("%d", &base_number);
ptr = (struct student*)malloc(base_number * sizeof(struct student));
students = base_number;
printf("\nEnter Student Information\nExample: John Smith 98.50\n\n");
for(i = 0; i < base_number; i++)
{
printf("Student %d: ", i+1);
scanf("%s %s %f", (ptr+i)->fname, (ptr+i)->lname, &(ptr+i)->score);
}
printStudents(ptr, students);
students++;
ptr = realloc(ptr, students * sizeof(struct student));
addStudents(ptr, students);
//Getting garbage for new student
printStudents(ptr, students);
return 0;
}
addStudents函數
void addStudents(struct student *s, int student_size)
{
printf("\nAdd A Student\nStudent Information: ");
scanf("%s %s %f", (s+student_size)->fname, (s+student_size)->lname, &(s+student_size)->score);
}
students++;
ptr = realloc(ptr, students * sizeof(struct student));
addStudents(ptr, students);
AddStudents在緩沖區后添加學生。 要么打電話
addStudents(ptr, students - 1);
或者更改addStudents實現以寫入緩沖區中的上一個位置:
void addStudents(struct student *s, int student_size)
{
printf("\nAdd A Student\nStudent Information: ");
scanf("%s %s %f", (s+student_size-1)->fname, (s+student_size-1)->lname, &(s+student_size-1)->score);
}
在調用addStudents
之前不要增加students
。
否則它超出了數組的范圍(並且正在編輯不同的學生)。
students++;
ptr = realloc(ptr, students * sizeof(struct student));
addStudents(ptr, students);
應該
ptr = realloc(ptr, (students + 1) * sizeof(struct student));
addStudents(ptr, students);
students++;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.