gpt4 book ai didi

C - 将指向数组的指针传递给函数以打印数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:16:27 25 4
gpt4 key购买 nike

我有一个类似这样的学生管理系统代码。输入函数工作正常,但我还没有弄清楚为什么我的输出函数在我调用它时立即停止。(我知道我不能从 C 中的函数返回局部数组,但我将数组分配给一个指针并返回那个指针,可以吗?)

这是我的代码:

 struct Student
{

char name[50];
char birth[25];
char gender[10];
float math, physics;

};

struct Student* input(int n, struct Student *p)
{
int i, id = 1;

struct Student s[n];

getchar();

for(i = 0; i < n; i++)
{


printf("Name: ");
fgets(s[i].name, 50, stdin);
s[i].name[strlen(s[i].name)-1] = '\0';

printf("Date of birth: ");
fgets(s[i].birth,25,stdin);
s[i].birth[strlen(s[i].birth)-1] = '\0';

printf("Gender: ");
fgets(s[i].gender,10,stdin);
s[i].gender[strlen(s[i].gender)-1] = '\0';

printf("Math = ");
scanf("%f", &s[i].math);

printf("Physics = ");
scanf("%f", &s[i].physics);

getchar();
}
p = s;
return p;
}


void outPut(int n, struct Student *p)
{
int i;
for(i = 0; i < n; i++)
{
printf("%s %s %s %f %f\n", p[i].name, p[i].birth, p[i].gender, p[i].math, p[i].physics);
}
}


int main()
{
int n;

struct Student *p, *p1;
int choice;

printf("-----------Student Management-----------");
printf("\n1. Add new students.\n2. Print student list.\n");

do
{
printf("Your choice = ");
scanf("%d", &choice);
switch(choice)
{
case 1:
printf("Number of students = ");
scanf("%d", &n);
input(n,p);
break;

case 2:
outPut(n,p);
break;

}
}
while(choice!=0);
return 0;
}

最佳答案

您将数组定义为局部变量。意思是函数结束后它就不再存在了。为避免这种情况,请将您的数组声明为指针并使用 ma​​lloc 对其进行初始化:

struct Student *s = malloc(sizeof(Student) * n);

它将表现为一个常规数组,您将能够将其自身用作函数返回值。

关于C - 将指向数组的指针传递给函数以打印数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51054366/

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