0

我正在编写一个在 C 中实现链表的程序。这是我的程序。

/*Implementing a singly linked list in c*/
#include<stdio.h>
#include<stdlib.h>
#include<alloca.h>

   struct node{

    int data;
   struct node* link;
}*start=NULL;


void main(){

    char choice;
    int data;

    do{

        printf("Enter data\n");
        scanf("%d",&data);

        struct node* temp;
        temp=(struct node*)malloc(sizeof(struct node));
        temp->data=data;
        temp->link=NULL;

        if(start==NULL)
            start=temp;
        else
        {
            struct node* traversing_pointer;
            traversing_pointer=start;
            while(traversing_pointer!=NULL)
                traversing_pointer=traversing_pointer->link;

            traversing_pointer->link=temp;

        }
         printf("Do you want to enter more");
 choice=getchar();        

    }
    while(choice=='y'|| choice=='Y');}

我基本上希望在链表中至少创建一个节点,这就是我使用 do、while 循环的原因。但是在第一个数据输入之后,程序在不接受choice变量输入的情况下终止。这是我的输出。可以是什么

Enter data
45
Do you want to enter more
RUN FINISHED; exit value 10; real time: 2s; user: 0ms; system: 0ms

可能的错误是什么?

4

2 回答 2

2

要使用输入流中留下的换行符,请执行以下操作:

scanf("%d",&data);
getchar(); //To consume a newline 

或使用循环读取所有换行符。

scanf("%d",&data);
int c=0;
while ((c = getchar()) != '\n' && c != EOF) ; // Read & ignore all newlines

我看到的另一个问题是您没有正确链接节点。您想将新节点链接为最后一个节点。所以你必须遍历到最后一个节点(直到你到达 NULL)。将循环条件更改为:

while(traversing_pointer->link!=NULL)
    traversing_pointer=traversing_pointer->link;

traversing_pointer->link=temp;
于 2013-09-08T20:56:57.113 回答
1

这是因为您getchar在输入后按 Enter 键会读取您输入的行尾45

于 2013-09-08T20:45:16.930 回答