我如何使用结构?

好的,首先我会解释我的任务。 对于这个分配,我必须使用动态内存分配,我没有遇到任何问题。 我遇到的问题是弄清楚正确的工作方式。 对于我的任务,我需要创建一个程序,提示用户输入他们有多少学生然后要求提供以下信息; 学生证,出生日期和电话号码。 我需要使用循环来提示用户输入所有学生信息。 我需要创建一个循环,它将扫描所有学生ID并使用他们的生日找到最老的学生(循环必须能够扫描超过3名学生)。

这是我的代码,我已经从你们那里获得了一些建议甚至一些代码,但是在实现它们之后,我对我应该做的事情更加困惑。 请看一看并批评我。

编辑:我还添加了我收到的代码和错误

谢谢。

#include  #include  int main (void) { int * studentData= NULL; int * studentDataType=NULL; int students; int studentID; int year; int month; int day; long long phone; printf("How many students are you entering records for:\n"); scanf("%d", &students); studentData=(int*)malloc((sizeof(int)*students)); struct studentDataType { int studentID; int year; int month; int day; long long phone; }; //invalid operands to binary * (have 'int' and 'int *') studentDataType *studentData = (studentDataType*)malloc(numberOfStudents *sizeof(studentData)); for (int i = 0 ; i < students ; ++i) { printf("%d, %d, %d, %d, %d\n", studentID, year, month, day, phone); } } 

你正在重新定义studentData

int * studentData= NULL;

然后

studentDataType *studentData = (studentDataType*)malloc(numberOfStudents * sizeof(studentData));

您应该首先声明studentDataType结构(在main() ),然后在原始声明中使用它

要查看任务,至少在第一次编写一些程序中你必须要做的块方案时会更好。 在你的情况下:

  1. 从用户(每个结构)读取数据。
  2. 增加数组大小,添加新结构。
  3. 循环1-2直到输入用户完成添加新人(这里需要一些条件才能完成)。
  4. 找到必要的结构并打印出来。

所以第一步是从用户那里读取信息。 您可以使用scanf():以最简单的方式,您可以逐步为每个字段执行此操作:

 #include  ... int value; scanf("%d", &value); ... 

如果成功,此函数应返回它读取的项目数(在您的情况下为1)。 对于手机,你应该使用scanf(“%ld”,和手机)。

调整数组使用函数realloc()的大小(#include:

 realloc(&ptr_to_array, new_size); 

数组的每个元素都是指向结构“student”的指针。 后续步骤类似。

第一个问题是您的变量名称与类型名称相同。 虽然你可以在某种程度上使用C语言,例如:

 typedef int x; x foo (xx) { return x; } 

为了可读性目的,不这样做可能是个好主意。 所以在你的情况下你有:

 int * studentData= NULL; int * studentDataType= NULL; 

这是一个变量名,那么你有:

 struct studentDataType ... 

这是一个类型的名称(应该用作struct studentDataType,而不是像你一样没有struct); 最后

 studentDataType *studentData = ... 

被编译器视为对两个变量的操作,而不是您期望的类型声明。 所以你的内存分配需要是:

 struct studentDataType *studentData = malloc(numberOfStudents *sizeof(struct studentData)); 

这会带来一个问题,即您重新定义了在程序开头声明的studentData,并且未定义“numberOfStudents”,可能您想要编写“学生”。

至于使用scanf读取数据,请参阅上一条评论。