Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:打印链表问题_C_Linked List - Fatal编程技术网

C:打印链表问题

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

我在打印这个链表时遇到了一点问题

该程序应该从用户那里获取一个包含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 <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++)