Problem beim sortieren von Struktur



  • Guten abend,
    ich glaube ich habe gerade ein riesen Brett vorm Kopf und hoffe Ihr könnt das mal schnell entfernen.

    Ich versuche über ein Bubble Sort eine Struktur zu sortieren, allerdings bekomm ich im SWAP Teil immer die Meldung "Lvalue required ... "

    #include <string.h>
    #include <stdio.h>
    
    void sort_d(int n);
    
    //wird global deklariert, weil die Struktur im Sort gebraucht wird
    struct d {
    	int nr;
    	char abt[20];
    	char loc[20];
    }*daten=NULL,*temp;
    
    int main(void) {
    
     /* ... Eingabe von Daten in die Struktur mit dynamischer Speicher Allocation   
      * etc.
     */ Aufruf der Funktion sort_d, Übergabe der Anzahl der Größe der Struktur
    
     printf("\n\n\n");
     return 1;
    }
    
    void sort_d(int n){
    
    	int i,j;
    
    	for(j=n;j>=1;j--)
    		for(i=1;i<=j;i++)
    			if(((daten+(i-1))->nr) > ((daten+i) ->nr))
    			{
    				temp = daten+i;
    				//nur für die folgenden beiden Zeilen kommt die 
                                    //Meldung
    
                                    daten+i = daten+(i-1);
    				daten+(i-1) = temp;
    
    			}
    
    }
    


  • eine operation darf nicht links des Zuweisungsoperators stehen.
    Aber warum nutzt du nicht die sort-Operation?



  • eine operation darf nicht links des Zuweisungsoperators stehen.

    Hm stimmt das ist natürlich sehr logisch, hätt ich auch selber drauf kommen können.

    Das ich die Sortierfunktion nicht nutze hat rein übungstechnische Gründe, bei dem Programm handelt es sich nicht um ein effektiv genutztes sondern lediglich um eine Übung 🙂

    Ich würde das jetzt so lösen:

    void sort_d(int n){
    
    	int i,j;
    	struct d adr_temp; //tempöräre Adresse
    
    	for(j=n;j>=1;j--)
    		for(i=1;i<=j;i++)
    			if(((daten+(i-1))->nr) > ((daten+i) ->nr))
    			{
    				temp = daten+i;
    				adr_temp = daten+i; /* Adr von daten+i wird 
                                                         * einer Temp. Var 
                                                         * zugefügt, allein aus dem 
                                                         * Zwecke, dass links  
                                                         * keine, Operation steht
                                                         */
    				adr_temp = daten+(i-1);
    				adr_temp = daten+(i-1);
    				adr_temp = temp;
    
    			}
    
    }
    

    Oder wie wäre ein eleganter Weg?

    Gruß
    Sascha



  • hm ne da war ich wohl ein wenig voreilig, die Idee mit der temp. Adr. klappt irgendwie nicht 😃

    Aber ich bin weiterhin natürlich über einen Tip dankbar!


Log in to reply