2011-03-27 33 views
1

我在这里跟我的程序新手问题....问题让我的程序工作

我希望它打印在升序和降序的城市名单,到目前为止我只是在实现下行部分。

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<ctype.h> 

int main(void) { 
    int i, j, ch, sort=0; 
    printf("HOW WOULD YOU LIKE TO SORT?\n\nASCENDING\n\nDESCENDING\n\n"); 
    ch=getc(stdin); 
    if(toupper(ch)=='A'&&tolower(ch)=='a') sort=1; 
    if(sort==1) printf("\nSORT ASCENDING...\n"); 
    else printf("\nSORT DESCENDING...\n"); 
    printf("\nHOW MANY CITIES WOULD YOU LIKE? : - \n"); 
    scanf("%d",&i); 
    char NAMES[i][20]; 
    j=0; 
    while(j<i) { 
    printf("ENTER NAME "); 
    scanf("%s",NAMES[j]); 
    j++; 
    } 
    char swapNAME[20]; 
    int r,k; 
    printf("THE ORIGINAL LIST WAS :\n"); 
    for(r=0;r<i;r++) printf("%s\n",NAMES[r]); 
    for(r=0;r<i-1;r++) { 
    for(k=r+1;k<i;k++) { 
     if(strcmp(NAMES[k],NAMES[r])>0) { 
     strcpy(swapNAME,NAMES[r]); 
     strcpy(NAMES[r],NAMES[k]); 
     strcpy(NAMES[k],swapNAME); 
     } 
    } 
    } 
    printf("\n THE SORTED LIST IS NOW : \n"); 
    for(r=0;r<i;r++) printf("%s\n",NAMES[r]); 
    getc(stdin); 

    system("pause"); 
    return 0; 
} 

请提出若降序排序工作将极大地意识到aganin thankz

+7

确切的问题是什么?你有错误吗?在哪行代码? – 2011-03-27 14:22:37

+2

一个审美和争论点,但你真的需要打印所有大写? – 2011-03-27 14:33:29

回答

2

任何努力,那么你需要的是在if语句来处理其他方向的额外条件:

for(r=0;r<i-1;r++) { 
    for(k=r+1;k<i;k++) { 
     if((sort==0 && strcmp(NAMES[k],NAMES[r])>0)|| 
     (sort==1 && strcmp(NAMES[k],NAMES[r])<0)) { 
     strcpy(swapNAME,NAMES[r]); 
     strcpy(NAMES[r],NAMES[k]); 
     strcpy(NAMES[k],swapNAME); 
     } 
    } 
    } 
0

首先,您的排序关闭。为了解决这个问题,只需用qsort调用来替换你的冒泡排序,并立即导致一种很好的方法来做你的反向排序。尤其可以尝试:

 

int 
rstrcmp(const char *s1, const char *s2) 
{ 
    return -strcmp(s1, s2); 
} 


int main(int argc, char **argv) { 
    ... 
    int (*compare)(const char *s1, const char *s2); 
    /* Based on user input, set 
    compare = rstrcmp; 
    -- or -- 
    compare = strcmp; 
    */ 
    ... 
    qsort(NAMES, i, 20, compare); 
    ... 

,推荐,不提示排序方向,但让用户将它作为argv中的标志。