该程序应允许用户输入一些名称(直到用户希望继续),然后按升序显示这些名称。我在比较字符数组中使用了 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("nnList is empty");
else
{
display = list;
while (display != NULL )
{
printf("%sn", 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();
}
插入函数中的 else 更改为以下内容:
else
{
temp = list;
while(temp !=NULL && strncmp(temp->nm,name,10)<0)
{
prev=temp;
temp=temp->next;
}
if(temp==NULL)
prev->next=newnode;
else
{
newnode->next=temp;
prev->next=newnode;
}
}
在你的插入函数中,您正在使用
newnode->next = prev->next;
prev->next = newnode;
像一样使用
newnode->next = temp;
prev->next = newnode;
[编辑]
像这样使用插入函数。
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;
prev = NULL;
// prev is a global variable, So assign it to NULL each time, Otherwise it will keep old value.
while (temp != NULL)
{
if (strcmp(name, temp->nm) >= 0)
{
prev = temp;
temp = temp->next;
}
else
{
break;
}
}
newnode->next = temp;
prev->next = newnode;
}
}
现在请记住一件事,在您的代码中,
在main()中,你正在做
选择 == 'y';那不是分配。你应该使用
选择 = 'y';
在你的main(),在do{}while()你正在使用
而 (选择 = 'y' && 选择 != 'n');选择 ='y' 是赋值,而不是比较。像这样使用
while (选择 == 'y' && 选择 != 'n');
在 main() 中,您正在使用
scanf("%s", &choice);选择是一个字符,您正在尝试在此处使用字符串 (%s)。那会内存损坏所以像这样使用它,
选择 = getche();