#include <stdio.h>
#include <string.h>
struct student
{
char name[50];
int St_No;
float mark[10];
};
int main()
{
int entrynumber=0;
int r=0;
while(r != 1)
{
printf("choose one of the following optionsn");
printf("1-Introduce new studentn");
printf("2-Introduce new markn");
printf("3-Print report of all studentsn");
printf("4-Exitn");
char givenname[50];
int option;
scanf("%d",&option);
int n,i,e=0,j=0;
struct student *St[50], Stu[50];
St[50] = &Stu[50];
switch(option)
{
case 1:
entrynumber;
printf("Enter name of studentn");
scanf("%s",(*St[entrynumber]).name);
printf("nEnter student Numbern");
scanf("%d",&(*St[entrynumber]).St_No);
entrynumber++;
int noofstudents = entrynumber;
break;
|
我把剩下的剪掉了
好的,所以我在这里的这一行中遇到了 seg 错误
scanf("%s",(*St[entrynumber]).name);
当我把它放进去时,scanf
工作,它只是给出了一个 SEG 错误
谁能帮我请?
St[50] = &Stu[50];
不是将St
中的所有指针都设置为指向Stu
的相应元素的方法。你需要一个循环:
for (int i = 0; i < 50; i++) {
St[i] = &Stu[i];
}
顺便说一句,(*St[entrynumber]).name)
通常写成St[entrynumber]->name
.
实际上根本不需要指针数组。您可以在scanf()
通话中只使用Stu[entrynumber].name
和&Stu[entrynumber].St_No
。
不要忘记,scanf()
中的%s
只读了一个字。如果您尝试输入名字和姓氏,它将不起作用。您可能应该阅读带有fgets()
的整行(并且不要忘记删除末尾的换行符(。