gpt4 book ai didi

linked-list - C 编程 : Linked Lists

转载 作者:行者123 更新时间:2023-12-04 02:36:34 28 4
gpt4 key购买 nike

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

无论如何,该程序的目的是输入 8 个字符,然后让程序将字符打印回给您,并以相反的顺序打印回字符,当然是使用链表。

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

问题是

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

  • 此外,当它编译时,它会在屏幕上打印乱码,例如我刚刚运行它并打印出来

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

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

这里需要很多帮助。将不胜感激!

类(class)代码

#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 来检测列表终止。

你的问题是把字符或字符串倒过来打印,所以你需要写一些不同于你写的打印函数。

关于linked-list - C 编程 : Linked Lists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6381132/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com