2014-11-16 4 views
0

필자가 작성한이 프로그램에 약간의 문제가 있습니다. 포인터를 사용하여 구조체에 데이터를 입력하려고하는데 컴파일러가 "포인터를 불완전한 형식으로 참조 해제"했습니다.포인터를 사용하여 구조체에 값을 입력하는 방법은 무엇입니까?

프로그램의 기능을 간단 포인터

를 이용한 구조로, 입력 데이터에 기능을 사용하는 프로그램을 heres 번호 : 주요 기능은 단순히 입력 함수를 호출하여, 인수

void input(struct test *ptr) 
{ 
printf("Enter: \n"); 
fflush(stdin); 
scanf("%s",&ptr->entry); 

} 

void print(struct test *ptr) 
{ 

} 

int main() 
{ 
    int counter; 
    struct test 
    { 
     char entry[20]; 

    }p[4]; 
    struct test *ptr=p; 
    ptr=&p; 

    for(counter=0;counter<=4;counter++) 
     { 
      input(ptr); 
      ptr++; 
     } 
    return 1; 
} 
같은 구조 포인터를 전달

인쇄 기능이 여전히 비어 있습니다.

+2

"인쇄 기능은 여전히 ​​비어 있습니다." 예, 그렇습니다. 우리는 당신을 위해 코드를 작성하지 않을 것입니다. 당신의 구체적인 질문은 무엇입니까? –

+1

그리고'= 4 '를 원하지 않습니다.'p' 배열의 끝에서 하나를 액세스 할 수 있습니다. –

+1

"컴파일러는"불완전한 타입에 대한 참조 해제 ","어떤 라인에서? 우리가 당신을 도울 수 있도록 도와주세요 ... –

답변

0

&를 사용하여 문자열을 스캔하는 것은 필요하지 않습니다 문자열을 사용하여 스캔해야합니다. 0이 아니라 %c입니다. 빈 인쇄물을 채우십시오. 가급적 함수 이름 print을 다른 것으로 변경하십시오.

확인 아래 코드 :

#include <stdio.h> 
#include <string.h> 
    struct test 
    { 
     char entry[20]; 

    }p[4]; 

void input(struct test *ptr) 
{ 
printf("Enter: \n"); 
scanf("%s",ptr->entry); 
return; 
} 

void print(struct test *ptr) 
{ 
int i; 
for(i=0;i<4;i++) 
{ 
    printf("%s\n",ptr[i].entry); 
} 
return; 
} 
int main() 
{ 
    int counter; 

    struct test *ptr=p; 

    for(counter=0;counter<4;counter++) 
     { 
      input(ptr); 
      ptr++; 
     } 
     print(p); 
    return 0; 
} 
1

첫 번째 문제는 struct test이 "main"함수 내에서만 정의되며 input 또는 print에 액세스 할 수 없다는 것입니다. 모든 기능 밖에서 정의하십시오.

그런 다음 문자가 아닌 문자열을 스캔하려고하므로 "%s"이 필요합니다. 실제로 "% 19s"그래서 입력이 너무 길면 입력 배열의 끝 부분을 걸어 가지 않습니다. (모자 팁 @BLUEPIXY)

ptr->entry은 문자열을 넣을 위치의 주소이므로 &ptr->entry하지만 ptr->entry

ptrmain 두 번 지정하십시오. 두 번째는 잘못되었습니다 (다시 p은 구조체 배열의 주소이므로 초기화가 올바르게 이루어 지므로 &p의 할당이 잘못되었습니다.)

마지막으로 for 루프는 5 번 실행됩니다 , 2,3,4)과 마지막 반복 아예 것을 퍼팅 귀하의 4 요소 p 배열

의 마지막을 지나고 하나를 액세스합니다.

#include <stdio.h> 

struct test 
{ 
    char entry[20]; 
}; 

void input(struct test *ptr) 
{ 
    printf("Enter: \n"); 
    fflush(stdin); 
    scanf("%19s", ptr->entry); 
} 

void print(struct test *ptr) 
{ 

} 

int main() 
{ 
    int counter; 
    struct test p[4]; 
    struct test *ptr=p; 

    for(counter=0;counter<4;counter++) 
    { 
     input(ptr); 
     ptr++; 
    } 
    return 1; 
} 
+0

고마워. – Slaine

+0

Ta. 제발 도와 주셨으면 upvote 받아 받아 –

+0

죄송합니다. 실제로'% c'을 (를) 놓친 것입니다. 감사 –