2014-11-04 4 views
0

현재 학생 데이터베이스 할당을위한 프로그램을 작성하려고합니다. 구조 배열의 3 요소를 수동으로 설정 한 후 다음 3 명의 학생의 세부 정보가 사용자에 의해 입력됩니다.구조체 배열에 대한 포인터

나는 6 명의 학생 중 가장 나이가 많은 것을 찾아서 indexmax의 student_t 항목으로 반환하는 함수를 작성하려고합니다. 나는 실제로 stdt [6] 배열의 첫 번째 요소를 가리키는 포인터를 함수에 부여한 다음 함수 내에서 포인터를 사용하는 방법을 고민하고있다. 또한 가장 나이가 많은 항목을 메인으로 반환하는 방법을 알지 못합니다. 구조체 배열 요소의 값이 다른 정수 (최대 값)와 같다고 말하면 최대 값이 정수 값을 가진 다른 메모리 블록이고 정렬? 그래서 함수가 최대 나이를 결정한 후에 가장 나이가 많은 항목을 반환하는 방법을 모르겠습니다.

이것은 내가 지금까지 쓴 모든입니다 :이 작업을해야

#include <stdlib.h> 
#include <stdio.h> 

typedef struct { 
char *name; 
char *surname; 
char *UUN; 
char *department; 
char gender; 
int age; 
}student_t; 

student_t findOldest(student_t *studentarr, int len){ 
    int i; 
    int x; 
    int max; 
    max=0; 
for(i=0;i<len;i++){ 
    (p+i).age=x; 
    if(x>max){ 
    x=max; 
    } 
    } 
} 

int main() { 
int i; 
student_t stdt[6]={{"John","Bishop","s1234","Inf",'m',18},{"Lady","Cook","s2345","Eng",'f',21},{"James","Jackson","s33456","Eng",'m',17}}; 
student_t *p=&stdt[0]; 

for(i=3;i<6;i++) { 
printf("First name: \n"); 
scanf("%s",stdt[i].name); 
printf("Last name: \n"); 
scanf("%s",stdt[i].surname); 
printf("UUN: \n"); 
scanf("%s",stdt[i].UUN); 
printf("Department: \n"); 
scanf("%s",stdt[i].department); 
printf("Gender (m/f): \n"); 
scanf("%c",stdt[i].gender); 
printf("Age: \n"); 
scanf("%d",stdt[i].age); 
} 
findOldest(p,6); 

return 0; 
} 
+0

1)'scanf ("% s", stdt [i] .name);'문자열을 저장할 영역이 준비되지 않았습니다. – BLUEPIXY

+0

배열을 6 개의 요소로 초기화하는 것으로 생각했지만 3을 설정하면 다음 3 개의 요소에 사용할 수있는 메모리 블록이 여전히 3 개임을 의미했습니다. – pixelfigure

답변

1

.

학생을 돌려 보내고 싶으므로 최대 변수에 학생의 연령을 유지하십시오. max.age>

또는

(* (P + I)) 나이를 사용

을> 세> max.age -. 그리고 포인터를 참조하거나

(P + i)를 사용하는

하지만 코드에 다른 문제가 있습니다.

+0

고맙습니다. "findOldest (student_t * studentarr ..."부분을 유지해야한다면, p가 함수에있을 때마다 studentarr을 바꿀 수 있습니까? – pixelfigure

+0

정확하게 p의 각 위치를 studentarr로 바꿉니다. – Nickel

+0

다른 문제는 무엇입니까? 지금 내가보기에 필요한 사양에 맞는 것 같다 – pixelfigure

관련 문제