2011-08-23 4 views
0

이 연결된 목록을 인쇄 할 때 약간의 문제가 있습니다.C : 연결된 목록 인쇄 문제

프로그램은 사용자로부터 10 자의 목록을 가져 와서 순서대로 인쇄 한 다음 역순으로 인쇄합니다. 그러나 첫 번째 문자는 읽지 않습니다. 예

들어

사용자 유형 "문자를 입력하세요" B C D 예 A (ㄱ 읽지 않는 프로그램) F g H 제가 J K

b c d e J 가능한이 상세한 만들려고 K

제가 H g F.

감사합니다.

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

#define strsize 30 

typedef struct member 
{ 
    int number; 
    char fname[strsize]; 
    struct member *next; 
}RECORD; 

RECORD* insert (RECORD *it); 
RECORD* print(RECORD *it, int j); 

int main (void) 
{ 
    int i; 
    double result; 
    RECORD *head, *p; 
    head=NULL; 
    result=10; 

    for (i=1; i<=result; i++) 
     head=insert (head); 
    print (head, result); 

    return 0; 

} 

RECORD* insert (RECORD *it) 
{ 

    RECORD *cur, *q; 
    int num; 
    char junk; 
    char first[strsize]; 
    printf("Enter a character:"); 
    scanf("%c", &junk); 
    scanf("%s", &first); 

    cur=(RECORD *) malloc(sizeof(RECORD)); 

    strcpy(cur->fname, first); 
    cur->next=NULL; 

    if (it==NULL) 
     it=cur; 

    else 
    { 
     q=it; 
     while (q->next!=NULL) 
      q=q->next; 
     q->next=cur; 
    } 
    return (it); 

} 

RECORD* print(RECORD *it, int j) 
{ 
    RECORD *cur; 
    cur=it; 
    int i; 
    for(i=1;i<=j;i++) 
    { 
     printf("%s \n", cur->fname); 
     cur=cur->next; 
    } 
    return; 
} 
+2

Yikes! 당신은 들여 쓰기 작업을해야합니다. – pmg

+0

저는 보통 돌아가서 끝에 들여 쓰기를합니다 : -X – Erica

+2

@Erica 들여 쓰기의 이유는 약 20 %에 불과하므로 다른 사람들이 코드를 읽을 수 있습니다. 나머지 80 %는 귀하의 코드를 읽을 수 있습니다. – Daniel

답변

0

다른 오류를 고려하지 않은 경우 즉각적인 문제는 scanf입니다. junk 문자는 무시됩니다. 또한

printf("Enter a character:"); 
scanf("%c", &junk); 
scanf("%s", &first); 

는 경고를 컴파일러, 의 경고 수준을 크랭크과 마음 또한

+0

아, 감사합니다! 어떻게 경고 수준을 높일 수 있습니까? – Erica

+2

이것은 컴파일러에 따라 다릅니다. gcc의 경우 컴파일 명령에'-Wall -Wextra' 매개 변수를 추가하십시오. 'Visual Studio'에는 프로젝트 속성 어딘가에 옵션이 있습니다. – pmg

0

However, it's not reading the first character. 당신은 그것을 읽고 그것을 폐기하고 있습니다. scanf("%c", &junk);

1

통지 당신이 그 첫 번째 문자 읽을 않을 때, 나는 그것이 무시 것이라고 확신 것을 'k'는 단지 10자를 인쇄한다고 말하고 있기 때문에 11을줍니다.

마지막으로 0에서 루프를 시작하고 < 대상까지가는 일반적인 코딩 방법입니다. 예를 들어, 대신

for (i=1; i<=result; i++) 

이 인덱싱 될 것입니다 대부분의 일들이 인덱스로 시작하기 때문에 들어갈 중요한 습관이다

for (i=0; i<result; i++) 

사용하십시오 0 그것은 또한 당신의 코드가 훨씬을 할수있게한다 for 루프에서 < = 거의 볼 수없는 프로그래머에게 유용합니다. 두 조건 세트는 동일한 횟수만큼 반복됩니다.

+0

+1 관례 – pmg