我正在使用链表编写一个程序(真是一场噩梦)。
无论如何,该程序的目的是输入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来检测列表终止。
你的问题是反向打印字符或字符串,所以你需要编写一些其他的打印函数。