C:打印链表问题
我在打印这个链表时遇到了一点问题 该程序应该从用户那里获取一个包含10个字符的列表,然后按获得的顺序打印出来,然后按相反的顺序打印出来(目前为止还没有得到)。然而,它并不是在读第一个字符 比如说 “请输入字符” 用户类型 a(程序不读取a) B C D E F G H 我 J k 然后打印出来 B C D E F G H 我 J k 尽可能详细地说明这一点 谢谢C:打印链表问题,c,linked-list,C,Linked List,我在打印这个链表时遇到了一点问题 该程序应该从用户那里获取一个包含10个字符的列表,然后按获得的顺序打印出来,然后按相反的顺序打印出来(目前为止还没有得到)。然而,它并不是在读第一个字符 比如说 “请输入字符” 用户类型 a(程序不读取a) B C D E F G H 我 J k 然后打印出来 B C D E F G H 我 J k 尽可能详细地说明这一点 谢谢 #include <stdio.h> #include <stdlib.h> #include <str
#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;
}
#包括
#包括
#包括
#定义strsize 30
typedef结构成员
{
整数;
字符fname[strsize];
结构成员*next;
}记录;
记录*插入(记录*它);
记录*打印(记录*it,int j);
内部主(空)
{
int i;
双重结果;
记录*头,*p;
head=NULL;
结果=10;
对于(i=1;ifname,第一个);
cur->next=NULL;
if(it==NULL)
it=cur;
其他的
{
q=它;
while(q->next!=NULL)
q=q->next;
q->next=cur;
}
返回(it);
}
记录*打印(记录*it,int j)
{
记录*cur;
cur=it;
int i;
对于(i=1;ifname);
cur=cur->next;
}
返回;
}
但是,它没有读取第一个字符。
你在读它,然后丢弃它。请参见
scanf(“%c”和“垃圾”)代码>不考虑其他错误,您的直接问题是额外的scanf
。垃圾
字符被忽略
printf("Enter a character:");
scanf("%c", &junk);
scanf("%s", &first);
另外,请提高编译器的警告级别,并注意警告另外,请注意,当您读入第一个字符时,我非常确定它将忽略“k”,因为您只告诉它打印10个字符,而您给了它11个字符
最后,通常的编码实践是从0开始循环,直到<目标。例如,代替
for (i=1; i<=result; i++)
用于(i=1;iYikes!你需要在缩进上下功夫,我知道,我通常会返回并在结尾缩进:-X@Erica缩进的原因只有20%左右,以便其他人可以阅读您的代码。另外80%是为了让您可以阅读您的代码。这取决于编译器。对于gcc
,将参数-Wall-Wextra
添加到编译c中ommand;对于Visual Studio
,在项目属性的某个位置有一个选项。
for (i=0; i<result; i++)