2012-01-10 5 views
1
#include <stdio.h> 
main() 
{ 
    typedef struct{ 
     char *name; 
     int age; 
    }person[5]; 

    int i; 
    for (i=0;i<5;i++){ 
     printf ("name:"); 
     scanf("%s",person[i].name); 
     printf("\nage:"); 
     scanf("%d",&person[i].age);} 

    for (i=0;i<5;i++){ 
     printf ("person:%d",i); 
     printf ("name:%s",person[i].name); 
     printf ("age:%d",person[i].age); 
    } 
} 

이것은 내가 가지고있는 샘플 프로그램입니다. 그러나 컴파일하는 동안 나는 "계속 10,12,16과 17 행에있는 사람 앞에서 예상되는 표현을 계속 얻는다. 내가 뭘 잘못하고 있니?이 코드에서 내가 뭘 잘못하고 있니?

+1

코드를 들여 쓰면 문제가 발생합니다. –

답변

5

구문 오류를 수정하려면 typedef 키워드를 제거하십시오. 변수가 아닌 타입)

더 나은 아직, 변화 :. 또한

typedef struct{ 
    char *name; 
    int age;} Person; 

Person person[5]; 

다음은 잘못된 것입니다 :

scanf("%s",person[i].name); 

당신은 Fi를 필요 먼저 person[i].name에 메모리를 할당하십시오 (예 : malloc() 사용).

마지막으로, 다음 줄에 %s 형식 지정이 올바르지 않습니다 :

printf ("age:%s",person[i].age); 
+0

은 오타였던 질문을 % s (으)로 수정했습니다. 나는 지금 포인트를 얻은 것 같아.하지만 메모리 할당 부분에 대해 좀 더 설명 할 수 있겠 니?. 나는 지금 그것 때문에 세분화 오류가 발생하고 있다고 생각한다. – tarashish

+1

@unussunu :이 연습의 목적 상, 아마도 가장 쉬운 방법 일 것이다. 할 일은'char * name'을'char name [50]'(50은 NUL 터미네이터를 포함한 문자열의 최대 길이)로 변경하는 것입니다. – NPE

2

person이 형이 아닌 객체입니다. "scanf() 유형으로 입력 할 수 없습니다 : person".

나는 단순히 typedef를 제거하고 struct 정의를 main의 본문 외부에 남겨 둘 것이다. 내부에 객체를 생성하십시오.

struct person { /* ... */ }; 

int main(void) { 
    struct person person[5]; 
    /* ... */ 
    return 0; 
} 
관련 문제