【发布时间】:2016-10-06 01:47:10
【问题描述】:
所以我正在尝试根据名称从小到大对链表进行排序。它对它进行排序,但它以相反或错误的方式排序。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
//declaring a struct
struct node {
char *name;
int num;
struct node *next;
};
struct node *list=NULL;
/*
* insert()
*/
struct node *insert(char word2[], int val){
struct node *tmp;
tmp = malloc(sizeof(struct node));
if(tmp ==NULL){
fprintf(stderr, "out of memory\n");
exit(1);
}
tmp->name = strdup(word2);
tmp->num = val;
tmp->next = list;
list = tmp;
return tmp;
}//read string
void print(){
struct node *ptr;
for(ptr= list; ptr!=NULL; ptr = ptr->next){
printf(" %s/%d\n", ptr->name, ptr->num);
}//for loop
}//print
void sort(){
struct node *ptr1, *ptr2;
char *tmp;
for(ptr1 = list; ptr1!=NULL; ptr1 = ptr1->next){
for(ptr2 = ptr1->next; ptr2!=NULL; ptr2 = ptr2->next){
if(strcmp(ptr1->name, ptr2->name)>0){
//ptr1->name is "greater than" ptr2->name - swap them
tmp = ptr1->name;
ptr1->name = ptr2->name;
ptr1->name = tmp;
}
}
}
}//sort
int main (){
char buff[81];
int status=0;
int len;
char word1[20];
char word2[20];
int val;
// char word3[20];
while(fgets(buff, 81, stdin)>0){
len = strlen(buff);
if(buff[len-1]!='\n'){
fprintf(stderr,"Error: string line length was too long\n");
exit(1);
}
sscanf(buff, "%s %s %d", word1, word2, &val);
if(strcmp(word1, "insert")==0){
insert(word2, val);
sort();
}else if(strcmp(word1, "print")==0){
print();
}else{
}
}//while loop
return status;
}
这是我运行时输入的样子。
"insert a 1"
"insert b 2"
"insert c 3"
"print"
输出
c/3
b/2
a/1
如果尝试更改我的排序方法条件,但它一直以错误的方式排序。我似乎找不到错误。任何帮助将不胜感激。但是我的输出应该是这样的
期望的输出
a/1
b/2
c/3
【问题讨论】:
-
您是否使用调试器单步执行您的程序?
-
你是怎么做到的?
-
google
gdb将是一个开始 -
这就像木匠问如何使用锤子 :-) 请随时询问 Google。您只是想了解使用调试器的第 X 百万人,但我相信您会有所收获。
-
您的交换代码最后一行有错字。是仅在 StackOverflow 上还是在实际代码中?
标签: c sorting linked-list