2011-08-23 130 views
0

打印此鏈接列表時遇到了一些問題。C:打印鏈接列表問題

該程序應該從用戶列表中取出10個字符,並按照它的順序打印出來,然後以相反的順序打印出來(還沒有那麼遠)。但是,它不讀第一個字符。

對於實施例

「請輸入字符」 用戶類型 一個(程序不讀取一個) b Ç d Ë ˚F 克 ħ 我 Ĵ ķ

然後它打印 b c d e ˚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

哎呀!您需要處理您的縮進, – pmg

+0

我知道,我通常會在最後回退並縮進:-X – Erica

+2

@Erica縮進的原因只有大約20%,所以其他人可以閱讀您的代碼。另外80%是這樣的_you_可以讀你的代碼。 – Daniel

回答

0

不考慮其他錯誤,您的直接問題是額外的scanfjunk字符是被忽略的字符。

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.這也使得你的代碼更readible對於幾乎從未在for循環中看到< =的程序員。請注意,這兩組條件的循環次數相同。

+0

+1爲常見做法 – pmg