簡體   English   中英

C:打印鏈接列表問題

[英]C: Printing Linked List Problem

在打印此鏈接列表時,我遇到了一些問題。

該程序應該從用戶那里獲取10個字符的列表,並按照得到的順序打印出來,然后以相反的順序打印出來(還沒有到此為止)。 但是,它沒有讀取第一個字符。

例如

“請輸入字符”用戶鍵入a(程序未讀取a)bcdefghijk

然后打印bcdefghijk

試圖使其盡可能詳細。

謝謝!!

#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;
}

另外,請注意,當您讀完第一個字符時,我很確定它將忽略'k',因為您只告訴它打印10個字符,而您卻給了它11個字符。

最后,通常的編碼做法是從0開始循環,直到<目標。 例如,代替

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

請用

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

這是一個重要的習慣,因為您將要建立索引的大多數內容都是從索引0開始的。這也使您的代碼對於幾乎從未在for循環中看到<=的程序員來說更具可讀性。 請注意,兩組條件循環相同的次數。

However, it's not reading the first character. 您正在閱讀並丟棄它。 參見scanf("%c", &junk);

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

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

另外,提高編譯器的警告級別, 並注意警告

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM