Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    20

    Problema di assegnamento

    Qualcuno sa dirmi perchè non riesco a fare questo assegnamento???
    Segno le parti in ROSSO nel CODICE...
    Grazie a tutti per la collaborazione.....
    Fede



    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>
    
    #define SIZE 20
    
    typedef struct nodo{
           char cognome[20];
           char nome[20];
           char telefono[20];
           struct nodo *succ;
           }agenda;
    
    int main()
    {
      agenda *k, *pun;
      FILE *rubrica;
      int count = 0,i = 0;
      
      
      if ((rubrica = fopen("agenda.txt", "r")) == NULL)
      {          
          printf("Il File che stai cercando di aprire non esiste\n");
      }
      else
      {
          k = (agenda *)malloc(sizeof(agenda));
          if(k==NULL)
          { 
              printf("Memoria esaurita\n");
          }
          else
          {
              fscanf(rubrica,"%s",k->cognome);
              fscanf(rubrica,"%s",k->nome);
              fscanf(rubrica,"%s",k->telefono);
              pun = k;
              count++;
              while(!feof(rubrica))
                {
                  pun->succ = (agenda *)malloc(sizeof(agenda)); 
                  pun = pun->succ ;               
                  fscanf(rubrica,"%s",pun->cognome);
                  fscanf(rubrica,"%s",pun->nome);
                  fscanf(rubrica,"%s",pun->telefono);
                  count++;
                }
              pun->succ = NULL;
              printf("Numero di record trovati: %d\n",count);
              pun = k;
              do   
              {                                   
                    printf("\nNome: %s \t Cognome: %s \t Telefono: %s \t \n",pun->nome,pun->cognome,pun->telefono);
                    pun=pun->succ;                
              }while(pun != NULL);
              
              pun = k;
              
              char** cognomi = (char**)malloc(sizeof(char*) * count);
              char** nomi = (char**)malloc(sizeof(char*) * count);
              char** telefo = (char**)malloc(sizeof(char*) * count);
              
              for(i = 0; i<count; i++) 
              { 
                cognomi[i] = (char*)malloc(sizeof(char) * SIZE); 
                char* value1 = pun->cognome; 
                strcpy(cognomi[i], value1); 
                nomi[i] = (char*)malloc(sizeof(char) * SIZE); 
                char* value2 = pun->nome; 
                strcpy(nomi[i], value2); 
                telefo[i] = (char*)malloc(sizeof(char) * SIZE); 
                char* value3 = pun->telefono; 
                strcpy(telefo[i], value3); 
                pun = pun->succ;
              }
              
              
              
              int scambio = 0;
              int j;
              char minore_cognome[20];
              char minore_nome[20];
              char minore_telefono[20];
              
              for(i=0;i<=(count-1);i++)
              {
                    for(j=i+1;j<=(count);j++)
                    {
                         if(cognomi[j] < cognomi [i])
                         {
                            minore_cognome = cognomi[j];
                            minore_nome == nomi[j];
                            minore_telefono == telefo[j];
                            cognomi[j] == cognomi[i];
                            nomi[j] == nomi[i];
                            telefo[j] == telefo[i];
                            cognomi[i] == minore_cognome;
                            nomi[i] == minore_nome;
                            telefo[i] == minore_telefono;                        }
                    }   
              }
              
              printf("\n");
              for(i = 0; i < count; i++) 
              {
                      printf(">> %s <<\n", cognomi[i]);   
                      printf(">> %s <<\n", nomi[i]);
              }
              for(i = 0; i < count; i++) 
                    free(cognomi[i]); 
                    free(cognomi); 
        
          }
      }
      
    
      fclose(rubrica);
      printf("\n");
      system("PAUSE");	
      return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    In C non si assegnano le stringhe in quel modo ... come scritto in qualsiasi libro di base, si usano funzioni come la

    strcpy

    che copiano carattere per carattere.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    20
    grazie oregon....
    mi spiace...io non ho un libro....ho solo dei professori svogliatissimi...ma che non correggono il codice all'esame se non compila nemmeno.....

    Ti ringrazio per l'aiuto....ora provo con strcpy
    dovrebbe essere strcpy(minore_cognome, cognomi[i]) ???? giusto?????

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Nel codice precedente hai usato j non i ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    20
    ho modificato il codice come segue.....però non vedo risultati....il vettore cognomi[i] non cambia quando lo stampo sotto....

    codice:
    int j;
              char minore_cognome[20];
              char minore_nome[20];
              char minore_telefono[20];
              
              for(i=0;i<=(count-2);i++)
              {
                    for(j=i+1;j<=(count-1);j++)
                    {
                         if(cognomi[j] < cognomi [i])
                         {
                            strcpy(minore_cognome,cognomi[j]);
                            strcpy(minore_nome,nomi[j]);
                            strcpy(minore_telefono,telefo[j]);
                            strcpy(cognomi[j],cognomi[i]);
                            strcpy(nomi[j],nomi[i]);
                            strcpy(telefo[j],telefo[i]);
                            strcpy(cognomi[i],minore_cognome);
                            strcpy(nomi[i],minore_nome);
                            strcpy(telefo[i],minore_telefono);
                         }
                    }   
              }

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Bisogna vedere se la if viene eseguita o no ... abbiamo solamente parlato dell'assegnazione (la zona segnata in rosso), non ho controllato tutto il resto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    20
    Ho provato ad eseguire il codice mettendo // davanti alla if ed effetivamente lo esegue...quindi credo proprio a questo punto che sia la if a non essere eseguita con il confronto fra stringhe.....

    qualche idea????

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il mio voleva essere un suggerimento a controllare la if ... ma non l'hai colto ...

    Due stringhe non si confrontano in quel modo in C ... usi le stringhe come se lavorassi in Visual Basic ...

    Per confrontare due stringhe devi usare la funzione strcmp

    Se devi usare le stringhe C, devi studiarne le funzioni che le trattano ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    20
    Oregon ma come fai?

    Io ho studiato proprio Visual basic 6........ora però mi trovo a dover programmare con il C.......

    Stai diventando il mio mito....ehehhe.....grazie...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.