Когда функция вызывается для пустого списка, она вставляет только один элемент в список и завершает работу.
if(*ref==NULL)
{
*ref = temp;
return;
}
Также обратите внимание на то, что вызов fflush
для stdin
имеет неопределенное поведение.
fflush(stdin);
Функция может быть определена следующим образом
size_t insert( struct node **ref )
{
printf( "how many numbers: " );
size_t n = 0;
scanf( "%zu", &n );
if ( n != 0 )
{
while ( *ref != NULL )
{
ref = &( *ref )->next;
}
}
size_t i = 0;
for ( ; i < n && ( *ref = malloc( sizeof( struct node ) ) ) != NULL; i++ )
{
( *ref )->data = 0;
( *ref )->next = NULL;
printf( "enter the number: " );
scanf( "%d", &( *ref )->data );
ref = &( *ref )->next;
}
return i;
}
Вот демонстрационная программа
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node* next;
};
size_t insert( struct node **ref )
{
printf( "how many numbers: " );
size_t n = 0;
scanf( "%zu", &n );
if ( n != 0 )
{
while ( *ref != NULL )
{
ref = &( *ref )->next;
}
}
size_t i = 0;
for ( ; i < n && ( *ref = malloc( sizeof( struct node ) ) ) != NULL; i++ )
{
( *ref )->data = 0;
( *ref )->next = NULL;
printf( "enter the number: " );
scanf( "%d", &( *ref )->data );
ref = &( *ref )->next;
}
return i;
}
void display( struct node *head )
{
for ( ; head != NULL; head= head->next )
{
printf( "%d -> ", head->data );
}
puts( "null" );
}
int main(void)
{
struct node *head = NULL;
size_t n = insert( &head );
printf( "There are %zu nodes in the list. They are\n", n );
display( head );
return 0;
}
Ее результат может выглядеть как
how many numbers: 5
enter the number: 1
enter the number: 2
enter the number: 3
enter the number: 4
enter the number: 5
There are 5 nodes in the list. They are
1 -> 2 -> 3 -> 4 -> 5 -> null