포인터 주소값 관련해서 질문.
취직때문에
부랴부랴 c 언어 4일째 공부중입니다.
그전에 자바 아주 얇게 공부했습니다.
아 왜이렇게 답답한지ㅋ 하루종일 고민했는데 안풀려서
고수님의 현안을 듣고 싶습니다.
제 사수가 내준 과제입니다.
간단하게 text 파일에
hong 10 seoul
kim 20 busan
lee 30 incheon 저장되어있고
이름을 쳤을 때 그 이름이 속한 행을 출력하는 프로그램입니다.
쑥쓰럽지만;;
 1 #include 
 2 #include 
  3 
  4 struct member{
  5     char name[10];
  6     int age;
  7     char city[10];
  8 };
  9 
 10 int main(){
 11 
 12     char name[10];
 13     int i, menu;
 14     struct member m[3];
 15     FILE* fp = fopen("input.txt","r");
 16 
 17     while(1)
 18     {
 19       fseek(fp, 0, SEEK_SET);
 20 
 21         printf("[MENU]\n");
 22         printf("1. Search NAME 2. END\n\n");
 23 
 24         printf("Select Name: ");
 25         scanf("%d", &menu);
 26 
 27         if(menu == 1)
 28         {
 29             printf("\nNAME: ");
 30             scanf("%s", name);
 31 
 32             for(i=0;i<3;i++)
 33             {
 34                 fscanf(fp,"%s %d %s", m[i].name, &m[i].age, m[i].city);
 35 
 36 
 37             if(strcmp(name, m[i].name) == 0);
 38                 break;
 39             }
 40             if(i!=3)
 41     
 42             printf("\n%s %d %s\n\n", m[i].name, m[i].age, m[i].city);
 43         }
 44         else if(menu ==2)
 45         {
 46             break;
 47         }
 48     }
 49         fclose(fp);
 50   
 51         return 0;
 52 }
컴파일은 문제 없으나 실행시
Segmentation fault (core dumped)
이런게 뜨더군요
gcc -Wformat 으로 보면
find.c: In function 'main':
find.c:34: warning: format '%s' expects type 'char *', but argument 3 has type 'int'
find.c:34: warning: format '%s' expects type 'char *', but argument 5 has type 'int'
34행에 비교하는 변수 타입이 잘못된거 같으나;;
고민을 해봐도 풀리지 않습니다.
안그래도
34행의 & 라던가 문자열 포인터 관련해서 뭔가가 잘못된거 같은데 
현안을 부탁드립니다.
| 첨부 | 파일 크기 | 
|---|---|
| 61.22 KB | 


34행 다음에 각 멤버의 값들을 출력해보세요.
34행 다음에 각 멤버의 값들을 출력해보세요.
출력해보니 무슨 이름을 넣더라도 hong 25
출력해보니 무슨 이름을 넣더라도
hong 25 seoul 이 나오더군요;;
37행 에 if문 끝에 세미콜론 지우세요
저거 때문에 break가 if랑 상관 없이 계속실행되는 것 같아요
37행 if 문 끝 세미콜론이 맞는듯...
제가 만든다면, 이렇게 짤 듯 한데요...
if(strcmp(name, m[i].name) == 0)
{
printf( 이름/나이/도시 출력 );
break;
}
if( i >= 3 )
{
break;
}
댓글 달기