gpt4 book ai didi

c - 链表中的 strncmp

转载 作者:行者123 更新时间:2023-11-30 17:48:13 24 4
gpt4 key购买 nike

该程序应该允许用户输入一些名称(直到用户希望继续),然后按升序显示这些名称。我使用了 strncmp 函数来比较 char 数组。但是,当运行此命令时,只有已排序名称列表的第一个和最后一个名称作为输出给出(这意味着列表已排序)。但我不明白为什么它们之间的名字没有显示。请帮我!谢谢。

#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();
}

最佳答案

将插入函数中的 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;
}

}

关于c - 链表中的 strncmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18680448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com