此程序应允许用户输入一些名称(直到用户希望继续),然后按升序显示这些名称。我在比较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();
}
答案 0 :(得分:0)
在插入功能中, 你正在使用
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;
}
}
现在要记住一件事, 在您的代码中,
choice =='y'; 那不是作业。 你应该使用
choice ='y';
在你的main()中,在do {} while()你正在使用
while(choice ='y'&amp;&amp; choice!='n'); choice ='y'是赋值,而不是比较。 像这样使用
while(choice =='y'&amp;&amp; choice!='n');
,您正在使用
scanf(“%s”,&amp; choice); // choice是一个char,你试图在这里有字符串(%s)。这将记忆腐败 所以就这样使用它,
choice = getche();
答案 1 :(得分:0)
将插入函数中的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;
}
}