2011-03-27 6 views
1

Je vais avoir un problème avec mon programme novice ici ....obtenir mon programme pour travailler

Je veux imprimer une liste des villes dans les ascendants et par ordre décroissant, jusqu'à présent, je suis seulement obtenir la partie descendante implémentée.

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

plaisir des efforts seront grandement appréciés aganin thankz

+7

Quel est le problème exact? Avez-vous une erreur? Sur quelle ligne de code? –

+2

Un point esthétique et discutable, mais avez-vous vraiment besoin d'imprimer en majuscules? –

Répondre

2

Si le tri descendant fonctionne, tout ce que vous avez besoin est une condition supplémentaire dans la déclaration if pour gérer l'autre sens:

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

Tout d'abord, votre tri est désactivé. Pour résoudre ce problème, il suffit de remplacer votre tri à bulles par un appel à qsort, et cela conduit immédiatement à un bon moyen de faire votre tri inverse. En particulier, essayez:

 

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); 
    ... 

En tant que recommandation, ne pas demander la direction de tri, mais laisser l'utilisateur passer comme un drapeau dans argv.

Questions connexes