구조체 배열을 만드는 데 문제가 있습니다. 여러 학생에 관한 데이터를 저장하고 프로그램 실행을 통해 입력을 받아야합니다. 그런 다음 가장 높은 점수를 가진 사람 이름의 메모리 주소를 출력하십시오.C.의 구조체 배열이 링크되지 않음 목록
사이트에서 비슷한 문제에 대한 답변을 얻으려고했지만 아무런 도움이되지 않았습니다.
I 작성한 코드 구조체
struct student{
char name;
int marks;
};
이며 함수는 메뉴 구동 프로그램의 일부분
int num,max = 0,i;
printf("Number of students?\n");
scanf("%d", &num);
struct student* students = (struct student*)malloc (num* (sizeof(struct student)));
for (int x = 0; x < num; x++)
{
printf("Enter Name\n");
scanf("%c" , &students[x].name);
printf("Enter Marks\n");
scanf ("%d" , &students[x].marks);
}
for (i = 1; i < num; i++)
{
if (students[max].marks<students[i].marks)
{
max = i;
}
}
printf("The Memory Add for %c is %p\n", students[max].name , &students[max].name);
이다. 함수 코드에서 5 행 다음에 이상한 루프가 발생합니다. 그리고 나는 같은 것을 위해 이중으로 연결된 목록을 만들 수 없습니다.
편집 1
이들은 내가 구조체의 변경 및 FUNC
struct student{
char name[20];
int marks;
};
void memadd(){
int num,max = 0,i, mark;
printf("Number of students?\n");
scanf("%d", &num);
struct student* students = (struct student*)malloc (num* (sizeof(struct student)));
for (int x = 0; x < num; x++)
{
printf("Enter Name\n");
scanf("%s" , &students[x].name);
printf("Enter Marks\n");
scanf ("%d" , &mark);
students[x].marks = mark;
}
for (i = 1; i < num; i++)
{
if (students[max].marks<students[i].marks)
{
max = i;
}
}
printf("The Memory Add for %s is %p\n", students[max].name , &students[max].name);
그것은 이름의 입력에서의 배열을 제공되어있다. "형식 유형 '문자 '를 지정하지만 인수가 유형 '문자 () [20]이있다"
어떻게 형식은 문자로 만들 수 있죠 * [20]?
편집 2 이름의 검사와 문자 배열 그리고 문제가되는에 문자 이름을 수정 한 후 최종 작업 코드입니다.
struct student{
char name[20];
int marks;
};
int num,max = 0,i, mark;
printf("Number of students?\n");
scanf("%d", &num);
struct student* students = (struct student*)malloc (num* (sizeof(struct student)));
for (int x = 0; x < num; x++)
{
printf("Enter Name\n");
scanf("%19s" , students[x].name);
printf("Enter Marks\n");
scanf ("%d" , &mark);
students[x].marks = mark;
}
for (i = 1; i < num; i++)
{
if (students[max].marks<students[i].marks)
{
max = i;
}
}
printf("The Memory Add for %s is %p\n", students[max].name , &students[max].name);
그러나 16 진수로 주소를 인쇄하려면 어떻게해야합니까? 또는 얻는 것은 이미 16 진수입니다. 내가 메모리가 XYZ에 대한 추가 의 출력이 문제는 학생의 이름은 무엇 일어나는 것은 숯불과
scanf("%c" , &students[x].name);
인 상태입니다 0x7fb340c03928
구조체'char name'의 첫 번째 항목이 있습니까?확실히 문자 배열이어야합니다. 'char name [80]','% s' 또는 더 나은 '% 79s'로 스캔해야합니다. –
배열'name'은 이미 첫 번째 요소의 주소를 가리 키기 때문에'&'를 제거해야합니다. –
예. 감사합니다. 코드에서 유일하게 남아있는 오류였습니다. – Bhavna