首先我会解释我的任务。对于这个分配,我必须使用动态内存分配,我没有遇到任何问题。我遇到的问题是找出正确的工作方式。对于我的任务,我需要创建一个程序,提示用户输入他们有多少学生,然后要求提供以下信息;学生证,出生日期和电话号码。我需要使用循环来提示用户输入所有学生信息。我需要创建一个循环,扫描所有学生ID并使用他们的生日找到最老的学生(循环必须能够扫描超过3名学生)。
这是我的代码,我已经从你们那里获得了一些建议甚至是一些代码,但是在实现它们之后,我对我应该做的事情更加困惑。请看一看并批评我。
编辑:我还在我收到的代码中添加了错误
谢谢。
#include <stdio.h>
#include <stdlib.h>
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);
}
}
答案 0 :(得分:0)
您正在重新定义studentData
int * studentData= NULL;
然后再
studentDataType *studentData = (studentDataType*)malloc(numberOfStudents * sizeof(studentData));
您应首先声明studentDataType
结构(在main()
之外),然后在原始声明中使用它
答案 1 :(得分:0)
要查看任务,最好至少第一次写一些程序中你必须做的块方案。在你的情况下:
所以第一步是从用户那里读取信息。你可以使用scanf(): 用最简单的方法,您可以逐步为每个字段执行此操作:
#include <stdio.h>
...
int value;
scanf("%d", &value);
...
如果成功,此函数应返回它读取的项目数(在您的情况下为1)。 对于手机,你应该使用scanf(“%ld”,&amp; phone)。
调整数组使用函数realloc()的大小(#include:
realloc(&ptr_to_array, new_size);
数组的每个元素都是指向结构“student”的指针。 接下来的步骤类似。
答案 2 :(得分:0)
第一个问题是您的变量名称与类型名称相同。虽然你可以在某种程度上使用C语言,例如:
typedef int x;
x foo (x x)
{
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的阅读数据,请参阅上一条评论。