C编程:链表



我正在使用链表编写一个程序(真是一场噩梦)。

无论如何,该程序的目的是输入8个字符,让程序将这些字符打印出来,当然也可以使用链表按相反的顺序打印出来。

到目前为止我已经明白了。(我认为)它有很多问题。

存在问题

  • 当向用户询问字符时,它应该自动读取字符数量,而不必询问有多少字符

  • 此外,当它编译时,它会在屏幕上打印胡言乱语,例如,我刚刚运行它,它就会打印

    ¿r
      (àõ($ê¿¿  
    a¿r
    (àõ($ê¿¿  
    ¿r
      (àõ($ê¿¿  
    b¿r
       (àõ($ê¿¿  
    

这里需要很多帮助。非常感谢!

代码

#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, result;
    RECORD *head, *p;
    head=NULL;
    printf("Enter the number of characters: ");
    scanf("%d", &result);
    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", &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;
}

您有:

插入:

char first[strsize];
scanf("%c", &first);  /* note the %c */
strcpy(cur->fname, first);

打印中

printf("%s  n", cur->fname);

您应该使用%s而不是%c,因此在参数列表中将&format更改为format,因为format本身表示要存储字符串的位置的地址。

所以scanf调用应该像下面一样

scanf("%s", first);

另一件事。如果您在print函数中指定了返回类型,那么您应该返回一些东西,或者使它不返回任何东西(将返回类型声明为void)。不过,在这种情况下,这不会造成任何问题。

阅读编译器向您抛出的警告消息,您会发现编译器实际上已经回答了您的问题。

我想你需要重新设计一下。例如,要遍历链表,不需要对"j"进行计数。您可以通过检查next链接是否为NULL来检测列表终止。

你的问题是反向打印字符或字符串,所以你需要编写一些其他的打印函数。

相关内容

  • 没有找到相关文章

最新更新