将 C 中的结构与用户定义的函数一起使用
Using structures in C with user defined functions
我遇到了一个问题,我用不同的方法尝试了很多次,但仍然无法获得所需的解决方案,请帮助我。
问题:定义一个结构来存储学生的详细信息。将它们传递给一个函数,其中具有最高 CGPA 的学生是从一组 5 名学生中计算出来的。并显示结果。(这里我们要存储每个学生的姓名,年龄和CGPA)
这是我尝试解决的问题:
#include <stdio.h>
void highCGPA(float b,struct detst D[4]);
struct detst
{
int age;
float CGPA;
char name[30];
};
int main()
{
struct detst D[4];
int i;
float h;
for(i=0;i<=4;i++)
{
printf("Enter the name of student %d:\n",i+1);
scanf("%s",&D[i].name);
printf("Enter the age of student %d:\n",i+1);
scanf("%d",&D[i].age);
printf("Enter the CGPA obtined by student %d:\n",i+1);
scanf("%f",&D[i].CGPA);
}
highCGPA(h,D);
}
void highCGPA(float b,struct detst D[4])
{
int i,max;
max = D[0].CGPA;
for(i=0;i<=4;i++)
{
if(D[i].CGPA > max)
{
max = D[i].CGPA;
}
}
printf("Highest CGPA obtained is:\n%f",max);
}
问题不止一个。您正在尝试将 5 个学生的数据存储在一个大小为 4 的结构数组中。因此:
struct detst D[5]; // fixed size
int i;
float h;
for(i=0;i<5;i++) { // EDIT (comments suggestion): for loop fix following standard convetions
/* take input */
}
最后,如果将 max
声明为 int
,则无法尝试使用 float
的格式说明符打印它。所以:
printf("Highest CGPA obtained is: %d\n",max); // format specifier for int is %d (not %f)
还有其他几个问题。
- 您的函数声明
highCGPA
高于您的 struct detst
定义
你应该有错误
error: array type has incomplete element type ‘struct detst’
在结构定义之后声明你的函数。
- 您的
max
变量在函数 highCGPA
中是 int
,但您试图在其中存储一个 float
值。
稍作改动即可改进程序功能:
#include <float.h> // FLT_MAX
#include <stdio.h>
struct detst
{
int age;
float CGPA;
char name[30];
};
// Return offset of student with highest CGPA
int highCGPA(struct detst const (*D)[5]); // Using pointer to array
// to avoid degeneration
int main()
{
struct detst D[5];
int i;
for(i = 0; i < 5; i++)
{
printf("Enter the name of student %d:\n", i + 1);
scanf("%29s", D[i].name); // Make sure we don't overwrite the buffer
printf("Enter the age of student %d:\n", i + 1);
scanf("%d", &D[i].age);
printf("Enter the CGPA obtained by student %d:\n", i + 1);
scanf("%f", &D[i].CGPA);
}
int bestStudentOffset = highCGPA(&D); // By asking for best student
// we can obtain a lot more
printf(
"Best student is %d year old %s with\n",
D[bestStudentOffset].age,
D[bestStudentOffset].name);
printf("Highest CGPA obtained is:\n%f\n", D[bestStudentOffset].CGPA);
}
// Return offset of student with highest CGPA
int highCGPA(struct detst const (*D)[5])
{
int i, maxOffset = -1;
float max = -FLT_MAX;
for(i = 0; i < 5; i++)
{
if((*D)[i].CGPA > max)
{
max = (*D)[i].CGPA;
maxOffset = i;
}
}
return maxOffset;
}
我遇到了一个问题,我用不同的方法尝试了很多次,但仍然无法获得所需的解决方案,请帮助我。 问题:定义一个结构来存储学生的详细信息。将它们传递给一个函数,其中具有最高 CGPA 的学生是从一组 5 名学生中计算出来的。并显示结果。(这里我们要存储每个学生的姓名,年龄和CGPA) 这是我尝试解决的问题:
#include <stdio.h>
void highCGPA(float b,struct detst D[4]);
struct detst
{
int age;
float CGPA;
char name[30];
};
int main()
{
struct detst D[4];
int i;
float h;
for(i=0;i<=4;i++)
{
printf("Enter the name of student %d:\n",i+1);
scanf("%s",&D[i].name);
printf("Enter the age of student %d:\n",i+1);
scanf("%d",&D[i].age);
printf("Enter the CGPA obtined by student %d:\n",i+1);
scanf("%f",&D[i].CGPA);
}
highCGPA(h,D);
}
void highCGPA(float b,struct detst D[4])
{
int i,max;
max = D[0].CGPA;
for(i=0;i<=4;i++)
{
if(D[i].CGPA > max)
{
max = D[i].CGPA;
}
}
printf("Highest CGPA obtained is:\n%f",max);
}
问题不止一个。您正在尝试将 5 个学生的数据存储在一个大小为 4 的结构数组中。因此:
struct detst D[5]; // fixed size
int i;
float h;
for(i=0;i<5;i++) { // EDIT (comments suggestion): for loop fix following standard convetions
/* take input */
}
最后,如果将 max
声明为 int
,则无法尝试使用 float
的格式说明符打印它。所以:
printf("Highest CGPA obtained is: %d\n",max); // format specifier for int is %d (not %f)
还有其他几个问题。
- 您的函数声明
highCGPA
高于您的struct detst
定义 你应该有错误
error: array type has incomplete element type ‘struct detst’
在结构定义之后声明你的函数。
- 您的
max
变量在函数highCGPA
中是int
,但您试图在其中存储一个float
值。
稍作改动即可改进程序功能:
#include <float.h> // FLT_MAX
#include <stdio.h>
struct detst
{
int age;
float CGPA;
char name[30];
};
// Return offset of student with highest CGPA
int highCGPA(struct detst const (*D)[5]); // Using pointer to array
// to avoid degeneration
int main()
{
struct detst D[5];
int i;
for(i = 0; i < 5; i++)
{
printf("Enter the name of student %d:\n", i + 1);
scanf("%29s", D[i].name); // Make sure we don't overwrite the buffer
printf("Enter the age of student %d:\n", i + 1);
scanf("%d", &D[i].age);
printf("Enter the CGPA obtained by student %d:\n", i + 1);
scanf("%f", &D[i].CGPA);
}
int bestStudentOffset = highCGPA(&D); // By asking for best student
// we can obtain a lot more
printf(
"Best student is %d year old %s with\n",
D[bestStudentOffset].age,
D[bestStudentOffset].name);
printf("Highest CGPA obtained is:\n%f\n", D[bestStudentOffset].CGPA);
}
// Return offset of student with highest CGPA
int highCGPA(struct detst const (*D)[5])
{
int i, maxOffset = -1;
float max = -FLT_MAX;
for(i = 0; i < 5; i++)
{
if((*D)[i].CGPA > max)
{
max = (*D)[i].CGPA;
maxOffset = i;
}
}
return maxOffset;
}