2016-05-01 3 views
-3
  1. Das Programm muss die Strukturen basierend auf dem Zip-Element jeder einzelnen Struktur vom kleinsten zum größten ordnen.
  2. Die Eingabe basiert auf der Eingabe-/Ausgabeumleitung. Ein Beispiel für eine input.txt Datei ist wie folgt:
Jason Solis 
20294 Lorenzana Dr 
Woodland Hills, CA 
91364 
Robert Smith 
19831 Henshaw St 
Culver City, CA 
94023 
Bob Arum 
5142 Dumont Pl 
Azusa, CA 
91112 

Code:Wie man Strukturen von am wenigsten zum größten in C sortiert?

struct info { 

    char name[BUFF_SIZE];         
    char stAddress[BUFF_SIZE];          
    char cityAndState[BUFF_SIZE]; 
    char zip[BUFF_SIZE]; 
}; 

void selectionSort(struct info *ptrStruct); 




int main(void) 
{ 

    int count;      
    char buffer[600]; 
    struct info *ptrStruct[512]; 

    for (count = 0; count < 18; count++) 
    { 
     ptrStruct[count] = (struct info*) malloc(sizeof(struct info)); 
     gets(buffer); 
     strcpy(ptrStruct[count]->name, buffer);   
     gets(buffer); 
     strcpy(ptrStruct[count]->stAddress, buffer);  
     gets(buffer); 
     strcpy(ptrStruct[count]->cityAndState, buffer); 
     gets(buffer); 
     strcpy(ptrStruct[count]->zip, buffer);   
    } 

    selectionSort(ptrStruct); 

    printf("\n\nLEAST TO GREATEST\n"); 
    for (count = 0; count < 18; count++) 
    { 
     printf("%s\n", ptrStruct[count]->name); 
     printf("%s\n", ptrStruct[count]->stAddress); 
     printf("%s\n", ptrStruct[count]->cityAndState); 
     printf("%s\n", ptrStruct[count]->zip); 
    } 
} 

void selectionSort(struct info *ptrStruct[]) 
{ 

    int count2; 
    int count1; 
    int minIndex; 
    struct info *ptrTemporary;  

    for (count2 = 0; count2 < 18 - 1; count2++) 
    { 
     minIndex = count2; 
     for (count1 = count2 + 1; count1 < 18; count1++) 
     { 
      if (strcmp(ptrStruct[count1]->zip, ptrStruct[minIndex]->zip) < 0) 
       minIndex = count1; 
     } 
     ptrTemporary = ptrStruct[count2]; 
     ptrStruct[count2] = ptrStruct[minIndex]; 
     ptrStruct[minIndex] = ptrTemporary; 
    } 
} 
+0

Was 'STRUCT_SIZE' ist? – alk

+0

Zugriff auf die Elemente und dann sortieren – user8

+0

Die STRUCT_SIZE Ich habe es gerade geändert, um 512. –

Antwort

1

fix wie dieses

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

#define BUFF_SIZE 32 
#define STRUCT_SIZE 512 

struct info { 
    char name[BUFF_SIZE]; 
    char stAddress[BUFF_SIZE]; 
    char cityAndState[BUFF_SIZE]; 
    char zip[BUFF_SIZE]; 
}; 

void selectionSort(struct info *ptrStruct[], int size);//! 

int main(void){ 
    int count, size;//! 
    char buffer[600]; 
    struct info *ptrStruct[STRUCT_SIZE]; 

    for (count = 0; count < STRUCT_SIZE; count++){ 
     ptrStruct[count] = (struct info*) malloc(sizeof(struct info)); 
     if(EOF==scanf("%599[^\n]%*c", buffer)){//! 
      free(ptrStruct[count]); 
      break; 
     }; 
     strcpy(ptrStruct[count]->name, buffer); 
     scanf("%599[^\n]%*c", buffer); 
     strcpy(ptrStruct[count]->stAddress, buffer); 
     scanf("%599[^\n]%*c", buffer); 
     strcpy(ptrStruct[count]->cityAndState, buffer); 
     scanf("%599[^\n]%*c", buffer); 
     strcpy(ptrStruct[count]->zip, buffer); 
    } 

    size = count;//! 
    selectionSort(ptrStruct, size);//! 

    printf("\n\nLEAST TO GREATEST\n"); 
    for (count = 0; count < size; count++)//! 
    { 
     printf("%s\n", ptrStruct[count]->name); 
     printf("%s\n", ptrStruct[count]->stAddress); 
     printf("%s\n", ptrStruct[count]->cityAndState); 
     printf("%s\n", ptrStruct[count]->zip); 
     free(ptrStruct[count]); 
    } 
} 

void selectionSort(struct info *ptrStruct[], int size)//! 
{ 
    int count1, count2; 
    int minIndex; 
    struct info *ptrTemporary; 

    for (count2 = 0; count2 < size -1; count2++)//! 
    { 
     minIndex = count2; 
     for (count1 = count2 + 1; count1 < size; count1++)//! 
     { 
      if (strcmp(ptrStruct[count1]->zip, ptrStruct[minIndex]->zip) < 0)//! 
       minIndex = count1; 
     } 
     if(minIndex != count2){ 
      ptrTemporary = ptrStruct[count2];//! 
      ptrStruct[count2] = ptrStruct[minIndex]; 
      ptrStruct[minIndex] = ptrTemporary;//! 
     } 
    } 
} 
+0

Nevermind Ich sehe den großen Fehler, den ich gemacht habe, ist, dass ich einen Zeiger in die selectionSort Funktion übergab, anstatt das Array der Zeiger zu übergeben! Jetzt stürzt mein Programm nicht ab. –

+0

Das hat sehr gut funktioniert! Danke vielmals! –

+0

@RodEfraim Wenn das Problem gelöst wird, akzeptieren Sie dies. – BLUEPIXY

Verwandte Themen