簡體   English   中英

如何使用指針和動態內存添加新的結構學生

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM