Эта программа должна позволять пользователю вводить некоторые имена (пока пользователь не захочет продолжить.), А затем отобразить эти имена в порядке возрастания. Я использовал функцию strncmp при сравнении массивов char. Но когда это выполняется, в качестве вывода указывается только первое и последнее имя списка отсортированных имен (это означает, что список был отсортирован). Но я не могу понять, почему имена между ними не отображаются. Пожалуйста, помогите мне! Спасибо.strncmp в связанном списке
#include <stdio.h>
#include <malloc.h>
#include <string.h>
char name[10];
int place;
struct node
{
char nm[10];
struct node *next;
}*newnode, *prev, *temp, *display, *current, *list;
void createlist()
{
list = NULL;
}
;
void insert()
{
newnode = (struct node*) malloc(sizeof(struct node));
printf("Enter the Name: ");
scanf("%s", &name);
strncpy(newnode->nm, name, 10);
newnode->next = NULL;
if (list == NULL)
{
list = newnode;
}
else if (strncmp(name, list->nm, 10) < 0)
{
newnode->next = list;
list = newnode;
}
else
{
temp = list;
place = 0;
while (temp != NULL && place == 0)
{
if (strncmp(name, temp->nm, 10) >= 0)
{
prev = temp;
temp = temp->next;
}
else
{
place = 1;
}
newnode->next = prev->next;
prev->next = newnode;
}
}
}
void displayname()
{
if (list == NULL)
printf("\n\nList is empty");
else
{
display = list;
while (display != NULL)
{
printf("%s\n", display->nm);
display = display->next;
}
}
}
int main()
{
char choice;
choice == 'y';
createlist();
do
{
insert();
printf("Do you want to continue? ");
scanf("%s", &choice);
} while (choice = 'y' && choice != 'n');
displayname();
}
Это не обязательно означает, что список был отсортирован. Это может означать, что список был поврежден. –
Лучший способ узнать, как пройти через вашу программу, используя отладчик. Однако: не бросайте 'malloc'. – pzaenger