C:打印链接列表问题

时间:2011-08-23 20:11:56

标签: c linked-list

打印此链表时,我遇到了一些问题。

该程序应该从用户那里获取10个字符的列表,并按照它获得的顺序打印出来,然后以相反的顺序打印出来(还没到那么远)。但是,它没有读第一个字符。

例如

"请输入字符" 用户类型 a(程序没有读取a) b C d Ë F G H 一世 Ĵ ķ

然后打印出来 b C d Ë F G H 一世 Ĵ ķ

试图尽可能详细。

谢谢!

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

3 个答案:

答案 0 :(得分:1)

另外,请注意,当你读完第一个字符时,我很确定它会忽略'k',因为你只是告诉它打印10个字符,你给它11个。

最后,通常的编码实践是在0处开始循环并且直到&lt;目标。例如,而不是

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

请使用

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

这是一个很重要的习惯,因为大多数你要编入索引的东西都是从索引0开始的。它还使你的代码对于那些几乎从未在for循环中看到&lt; =的程序员来说更容易阅读。请注意,这两组条件循环次数相同。

答案 1 :(得分:0)

However, it's not reading the first character. 你正在读它并丢弃它。见scanf("%c", &junk);

答案 2 :(得分:0)

不考虑其他错误,您的直接问题是额外的scanfjunk字符是被忽略的字符。

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

此外,提高编译器的警告级别并注意警告