Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [c]Ordinamento struct

    salve a tutti. Devo registrare una gara di tuffi e

    VOTO
    NOME
    COGNOME

    Allora, io ho creato una struct per tenere conto di tali dati.

    Ovviamente, tralasciando gran parte del codice copio le cose importanti:
    codice:
    #include <stdio.h>
    #include <string.h>
    
    struct record {
    	char nome[20];
    	char cognome[20];
    	int voto;
    	} ;
    	
    void bubbleSortVoto(struct record r[], int array_size)
    {
      int i, j;
      struct record temp;
     
      for (i = (array_size - 1); i > 0; i--)
      {
        for (j = 1; j <= i; j++)
        {
          if (r[j-1].voto > r[j].voto)
          {
            temp = r[j-1];
            r[j-1] = r[j];
            r[j] = temp;
          }
        }
      }
    }
    
    
    int main() {
    	int n,p;
    	int index = 0;
    	int tuffatori;
    	
    	struct record r[32]; 
    
    
    printf("** INSERIMENTO NOMINATIVI **\n");
    			
    			
    			printf("Inserisci il Nome del %d  tuffatore\n", index);
    			scanf("%s", r[index].nome);
    			
    			printf("Inserisci il Cognome del %d tuffatore\n", index);
    			scanf("%s", r[index].cognome);
    			
    			/* -->inserimento voto <-- è stato spostato giù
    			printf("Inserisci il voto del %d tuffatore\n", index);
    			scanf("%d", &r[index].voto);
    			*/
    			
    			index++;
    			tuffatori = index;
    			
    		
    		}
    
    	printf("E' ora di inserire i voti\n\n");
    			
    			for(p = 0; p < tuffatori; p++){
    			printf("Nome: %s\tCognome: %s\tVoto: ", r[p].nome, r[p].cognome);
    			scanf("%d", &r[p].voto);
    			}
    
    //ORDINO PER VOTO
    				bubbleSortVoto(r, index);
    
    
    //ORDINAMENTO PER NOME
    
    ????

    Come faccio ad ordinare per Nome e/o per Cognome?
    Senza usare puntatori...? Ho provato ad adottare varie soluzioni... ma fin'ora solo buchi nell'acqua

  2. #2
    se devi ordinare separatamente per voti, nome e cognome, semplicemente riusi il bubblesort utilizzando negli if, al posto degli operatori > < ==, la strcmp

    strcmp

  3. #3
    Devo ordinare o voto, o nome o cognome.
    Quando ordino il voto.... Nome e Cognome seguono il voto....

    Quindi devo fare in modo che : ordinando il nome, cognome e voto lo seguano....


    Deve essere scritto così?

    codice:
    void bubbleSortNome(struct record r[], int array_size)
    {
      int i, j;
      struct record temp;
     
      for (i = (array_size - 1); i > 0; i--)
      {
        for (j = 1; j <= N-1; j++)
        {
          if (strcmp(r[j-1].nome > r[j].nome) <0)
          {
            strcpy(temp = r[j-1].nome);
            strcpy(r[j-1].nome = r[j].nome);
            strcpy(r[j].nome = temp);
          }
        }
      }
    }
    Perchè non mi funziona

  4. #4
    no, rileggi i prototipi delle funzioni e gli esempi presenti al link che ti ho passato
    quello che hai scritto non ha sensoù

    non devi scrivere i confronti all'interno della strcmp o le assegnazioni all'interno della strcpy
    la strcpy si occupa da sola di assegnare
    la strcmp ti restituisce un valore che ti permette di capire il risultato del confronto

  5. #5
    son riuscito a risolvere... correggendo la sintassi


    Ora il problema sta nella scanf dell'esercizio.
    Quando devo inserire un nome composto la scanf legge lo spazio come un a capo. Ovvero....

    Se mi chiamo Enrico Dal Maso....

    Nome0 = Enrico
    Cognome0 = Dal Maso

    Invece la scanf mi fa:

    Nome0 = Enrico
    Cognome0 = Dal
    Nome1 = Maso

    Come si può ovviare a questa cosa?

  6. #6
    usa la gets() al posto della scanf

    gets

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    @keyg7
    Quando posti del codice, devi includerlo all'interno dei tag CODE, non dei tag QUOTE, che servono ad altri scopi (citazione di altri post).

    Correggo i tuoi post.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.