C 将用户输入值分配给分配的内存
该程序背后的思想是为学生信息声明一个数据结构,然后让用户在数据结构的每个字段中输入一定数量的学生信息。我的问题是,当我输入名字时,程序停止工作。怎么了?谢谢你抽出时间C 将用户输入值分配给分配的内存,c,pointers,data-structures,malloc,variable-assignment,C,Pointers,Data Structures,Malloc,Variable Assignment,该程序背后的思想是为学生信息声明一个数据结构,然后让用户在数据结构的每个字段中输入一定数量的学生信息。我的问题是,当我输入名字时,程序停止工作。怎么了?谢谢你抽出时间 //Inclusion of necessary header files #include <stdio.h> #include <stdlib.h> //Data structure declaration struct student{ char firstName[20]; char lastNa
//Inclusion of necessary header files
#include <stdio.h>
#include <stdlib.h>
//Data structure declaration
struct student{
char firstName[20];
char lastName[20];
char id[10];
char gender;
int age;
double gpa;
};
//Function prototypes
void readStudentsInformation(struct student *, int size);
void outputStudents(struct student *, int size);
double averageGPA(struct student *, int size);
void sortByLastName(struct student *, int size);
void sortByGPA(struct student *, int size);
//Entry point
int main()
{
//Variable delcaration
int size;
struct student *ptr;
//Input prompt and function
printf("How many students?\n");
scanf_s("%d", &size);
//Allocation memory for struct student times the number of students and assigning it to a struct student pointer for external function modification
ptr = (struct student*)malloc(sizeof(struct student)*size);
//readStudentsInformation Function call
readStudentsInformation(ptr, size);
//Exit sequence
return 0;
}
//This functions reads the information for all the students from the keyboard, taking the class size through the pointer method and struct student from main
void readStudentsInformation(struct student *ptr, int size)
{
//For loop controller declaration
int i;
//Function message
printf("Student Information Form\n");
//This for loop increments the "index" of each students info location where user input is stored
for(i=0;i<size;i++)
{
//Each field has it's appropriate input limit
printf("Please enter Student %d's First Name(20 characters).\n", i+1);
scanf_s("%20s", ptr[i].firstName);
printf("Please enter Student %d's Last Name(20 characters).\n", i+1);
scanf_s("%20s", ptr[i].lastName);
printf("Please enter Student %d's ID(10 characters).\n",i+1);
scanf_s("%10s", ptr[i].id);
printf("Please enter Student %d's gender(M/F).\n",i+1);
scanf_s("%c", ptr[i].gender);
printf("Please enter Student %d's age.\n",i+1);
scanf_s("%3d", ptr[i].age); //Only 3 digits can be put in at a time
printf("Please enter Student %d's GPA.\n", i+1);
scanf_s("%.1lf", ptr[i].gpa); //From the lab it can be seen that no more than one decimal place is featured, so the same is done here
}
//Exit to main
return;
}
你应该这样做
scanf_s("%20s", ptr[i].firstName);
读名字。ptr+i将为您提供学生结构。您希望在结构成员中存储数据
也可以为此更改其他扫描。您可以使用
scanf("%s",ptr[i].firstName);
依此类推,将scanf中的其余结构成员更改为scanf,并将此块更改为如下所示:
scanf("%c", &ptr[i].gender);
printf("Please enter Student %d's age.\n",i+1);
scanf("%3d", &ptr[i].age); //Only 3 digits can be put in at a time
printf("Please enter Student %d's GPA.\n", i+1);
scanf("%1lf", &ptr[i].gpa);
否,缺少大小参数。fscanf_s函数与fscanf函数等效,只是c、s和[conversion说明符应用于一对参数……我已经调整了scanf_,但是程序似乎仍然崩溃。我觉得它不是正确的寻址。如果我声明了struct student类型的数组并将其数组大小设置为用户输入,该怎么办?