Perchè continua a darmi errore?

di il
23 risposte

23 Risposte - Pagina 2

  • Re: Perchè continua a darmi errore?

    Skynet ora funziona, il costrutto da te postato lo sto studiando, con tutta sincerità non ci sarei mai arrivato...non capisco perchè mi stampa a video n volte l'ultimo risultato invece che i contatti diversi tra loro
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    
    #define MAXDIMSTRINGHE 200
    
    
    
    typedef
    struct{
     char nome[MAXDIMSTRINGHE];
     char cognome[MAXDIMSTRINGHE];
     char telefono[MAXDIMSTRINGHE];
    } account ;
    account anonimo;
    
    typedef
    struct {
           int numero_contatti;
           } numcont;
           numcont numero;
           
    
    void inserisci (char n[MAXDIMSTRINGHE],char m[MAXDIMSTRINGHE],char t[MAXDIMSTRINGHE]){
         strcpy (anonimo.nome,n);
         strcpy (anonimo.cognome,m);
         strcpy (anonimo.telefono,t);
    }
    
    void visualizza (){
         printf("\n Nome: %s Cognome: %s Numero: %s\n ",anonimo.nome,anonimo.cognome,anonimo.telefono);
      
         return;
    }
    
    void bubbleSort(account *anonimo, int & num_account)
    
    {
       int j = num_account - 1;
       int i = 0;
    
       while(j > 0)
       {
          for(i = 0; i < j; i++)
          {
             if(strcmp(anonimo[i].cognome,anonimo[i+1].cognome) > 0)
             {
                account temp;
                strcpy(temp.cognome,anonimo[i].cognome);
                strcpy(temp.nome,anonimo[i].nome);
                strcpy(temp.telefono,anonimo[i].telefono);
    
                strcpy(anonimo[i].cognome,anonimo[i+1].cognome);
                strcpy(anonimo[i].nome,anonimo[i+1].nome);
                strcpy(anonimo[i].telefono,anonimo[i+1].telefono);
    
                strcpy(anonimo[i+1].cognome,temp.cognome);
                strcpy(anonimo[i+1].nome,temp.nome);
                strcpy(anonimo[i+1].telefono,temp.telefono);
             }
          }
          j--;
       }
    }
    
    
    int main() {
    
    
    
    //dichiarazione di variabili
    account anonimo[100];
    int num_account = 0;
    int i,numero;
    char nom[MAXDIMSTRINGHE],cogn[MAXDIMSTRINGHE],tel[MAXDIMSTRINGHE];
    
    printf("Quanti contatti vuoi inserire?");
    scanf("%d", &numero);
    
    for(i=0;i<numero;i++){
    
    printf("Inserire il nome: ");
    scanf("%s", &nom);
    
    printf("Inserire il cognome:");
    scanf("%s", &cogn);
    
    printf("Inserire il telefono:");
    scanf("%s", &tel);
    
    inserisci (nom,cogn,tel);
    }
    
    
    for(i=0;i<numero;i++){
                          visualizza();
                          }
    
    
    system("PAUSE");
    return 0;
    }
    
    Può essere un problema nel ciclo for che ho inserito?Oppure ho sbagliato la funzione di inserimento?
  • Re: Perchè continua a darmi errore?

    Cancella account anonimo; dopo la definizione della struttura. Il vettore l'hai defnito nel main. (non volevi globali no?)
    Hai sbagliato la funzione inserisci. Non li dai l'indice nel vettore.
    prova con
    
    void inserisci (char n[MAXDIMSTRINGHE],char m[MAXDIMSTRINGHE],char t[MAXDIMSTRINGHE], account * anonimo, int & num_account){
         strcpy (anonimo[num_account].nome,n);
         strcpy (anonimo[num_account].cognome,m);
         strcpy (anonimo[num_account].telefono,t);
    }
    
    nel main chiamma la funzione inserisci così:
    
    for(i=0;i<numero;i++){
    
    printf("Inserire il nome: ");
    scanf("%s", &nom);
    
    printf("Inserire il cognome:");
    scanf("%s", &cogn);
    
    printf("Inserire il telefono:");
    scanf("%s", &tel);
    
    inserisci (nom,cogn,tel, anonimo, num_account);
    num_account++;
    }
    
  • Re: Perchè continua a darmi errore?

    La funzione visualizza non va bene. Non sa da dove pescare i dati. Siccome hai lasciato quel
    account anonimo; 
    in cima, tutti i contatti tu li stai inserendo lì e non nel vettore ma siccome lui è una cella unica ti prende solo l'ultimo. Nel visualizza tu chiami tante volte la stampa dell'ultimo inserito e quindi anche la funzione visualizza non va bene.
    
    void visualizza (account *anonimo, const int index){
         printf("\n Nome: %s Cognome: %s Numero: %s\n ",anonimo[index].nome,anonimo[index].cognome,anonimo[index].telefono);
     
         return;
    }
    
    chiama la funzione visualizza così:
    
    for(i=0;i<numero;i++){
                          visualizza(anonimo,i);
                          }
    
  • Re: Perchè continua a darmi errore?

    Il mio professore, l'attuale in quanto è cambiato svariate volte nel corso di pochi anni, ci sta facendo usare solo C però altri corsi so che utlizzano il C++ magari con compilatore Eclipse.
    Effettivamente la scelta di programmare in C non è ottima però devo attenermi,volente o nolente, alla decisione.
    Col C++ il codice è piccolissimo!! Inoltre col C++ ieri non avrei avuto bisogno di utlizzare la fgets giusto?
    Pensa che i corsi sono iniziati il 18 ottobre, a distanza di meno di un mese abbiamo già fatto tanto,imho.

    skynet ora in uscita non da nulla :S

    Davvero grazie per l'aiuto skynet, non tutti avrebbero avuto la tua pazienza e la tua disponibilità.
  • Re: Perchè continua a darmi errore?

    Posta il programma completo. Vediamo che altri pasticci hai combinato.
  • Re: Perchè continua a darmi errore?

    Sei un Santo skynet, non saprò mai come sdebitarmi
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    
    #define MAXDIMSTRINGHE 200
    
    
    
    typedef
    struct{
     char nome[MAXDIMSTRINGHE];
     char cognome[MAXDIMSTRINGHE];
     char telefono[MAXDIMSTRINGHE];
    } account ;
    account anonimo;
    
    typedef
    struct {
           int numero_contatti;
           } numcont;
           numcont numero;
           
    
    void inserisci (char n[MAXDIMSTRINGHE],char m[MAXDIMSTRINGHE],char t[MAXDIMSTRINGHE], account * anonimo, int & num_account){
         strcpy (anonimo[num_account].nome,n);
         strcpy (anonimo[num_account].cognome,m);
         strcpy (anonimo[num_account].telefono,t);
    }
    void visualizza (){
         printf("\n Nome: %s Cognome: %s Numero: %s\n ",anonimo.nome,anonimo.cognome,anonimo.telefono);
      
         return;
    }
    
    void bubbleSort(account *anonimo, int & num_account)
    
    {
       int j = num_account - 1;
       int i = 0;
    
       while(j > 0)
       {
          for(i = 0; i < j; i++)
          {
             if(strcmp(anonimo[i].cognome,anonimo[i+1].cognome) > 0)
             {
                account temp;
                strcpy(temp.cognome,anonimo[i].cognome);
                strcpy(temp.nome,anonimo[i].nome);
                strcpy(temp.telefono,anonimo[i].telefono);
    
                strcpy(anonimo[i].cognome,anonimo[i+1].cognome);
                strcpy(anonimo[i].nome,anonimo[i+1].nome);
                strcpy(anonimo[i].telefono,anonimo[i+1].telefono);
    
                strcpy(anonimo[i+1].cognome,temp.cognome);
                strcpy(anonimo[i+1].nome,temp.nome);
                strcpy(anonimo[i+1].telefono,temp.telefono);
             }
          }
          j--;
       }
    }
    
    
    int main() {
    
    
    
    //dichiarazione di variabili
    account anonimo[100];
    int num_account = 0;
    int i,numero;
    char nom[MAXDIMSTRINGHE],cogn[MAXDIMSTRINGHE],tel[MAXDIMSTRINGHE];
    
    printf("Quanti contatti vuoi inserire?");
    scanf("%d", &numero);
    
    for(i=0;i<numero;i++){
    
    printf("Inserire il nome: ");
    scanf("%s", &nom);
    
    printf("Inserire il cognome:");
    scanf("%s", &cogn);
    
    printf("Inserire il telefono:");
    scanf("%s", &tel);
    
    inserisci (nom,cogn,tel, anonimo, num_account);
    num_account++;
    }
    
    for(i=0;i<numero;i++){
                          visualizza();
                          }
    
    
    system("PAUSE");
    return 0;
    }
    
    
    Dimmi una cosa tu quanto impiegheresti a fare un programma del genere partendo da zero?Come posso diventare veloce nel capire un testo e realizzarne un algoritmo?
  • Re: Perchè continua a darmi errore?

    Ecco il codice corretto. Leggi le note che ti ho messo e raggionaci sopra.
    Fare un programma del genere ci si mette 5 minuti (davvero, il tempo di scrivere il tutto).Ma devi essere bravo ad avere l'algoritmo già in mente.
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    
    #define MAXDIMSTRINGHE 200
    
    
    
    typedef
    struct{
    	char nome[MAXDIMSTRINGHE];
    	char cognome[MAXDIMSTRINGHE];
    	char telefono[MAXDIMSTRINGHE];
    } account ;
    
    //account anonimo;  //che ci fa sto anonimo quà sopra se l'hai definito nel main con lo steso nome ed è un vettore?
    /*
    typedef struct {
    	int numero_contatti;
    } numcont;
    numcont numero;
    */
    
    /* E' buon uso mettere tutte le varibili che non andrai a modificare come const 
    /* cosi' se per sbaglio li modifichi il compilatore ti dara' errore
    */
    void inserisci (const char n[MAXDIMSTRINGHE],const char m[MAXDIMSTRINGHE],const char t[MAXDIMSTRINGHE], account * anonimo, int & num_account)
    {
    	strcpy (anonimo[num_account].nome,n);
    	strcpy (anonimo[num_account].cognome,m);
    	strcpy (anonimo[num_account].telefono,t);
    }
    
    //mancavano i riferimenti del vettore e l'index
    void visualizza (const account *anonimo, const int & index)
    {
    	printf("\n Nome: %s Cognome: %s Numero: %s\n ",anonimo[index].nome,anonimo[index].cognome,anonimo[index].telefono);
    }
    
    void bubbleSort(account *anonimo, int & num_account)
    
    {
    	int j = num_account - 1;
    	int i = 0;
    
    	while(j > 0)
    	{
    		for(i = 0; i < j; i++)
    		{
    			if(strcmp(anonimo[i].cognome,anonimo[i+1].cognome) > 0)
    			{
    				account temp;
    				strcpy(temp.cognome,anonimo[i].cognome);
    				strcpy(temp.nome,anonimo[i].nome);
    				strcpy(temp.telefono,anonimo[i].telefono);
    
    				strcpy(anonimo[i].cognome,anonimo[i+1].cognome);
    				strcpy(anonimo[i].nome,anonimo[i+1].nome);
    				strcpy(anonimo[i].telefono,anonimo[i+1].telefono);
    
    				strcpy(anonimo[i+1].cognome,temp.cognome);
    				strcpy(anonimo[i+1].nome,temp.nome);
    				strcpy(anonimo[i+1].telefono,temp.telefono);
    			}
    		}
    		j--;
    	}
    }
    
    
    int main() {
    
    
    
    	//dichiarazione di variabili
    	account anonimo[100];
    	
    	int i = 0;
    	int numero = 0; //primo errore numero è un int oppure un struct definto sopra?
    					// prendiamo per buono che sia un int
    	int num_account = 0;
    	char nom[MAXDIMSTRINGHE],cogn[MAXDIMSTRINGHE],tel[MAXDIMSTRINGHE];
    
    	printf("Quanti contatti vuoi inserire?");
    	scanf("%d", &numero);
    
    	for(i = 0; i < numero; i++)
    	{
    
    		printf("Inserire il nome: ");
    		scanf("%s", &nom);
    
    		printf("Inserire il cognome:");
    		scanf("%s", &cogn);
    
    		printf("Inserire il telefono:");
    		scanf("%s", &tel);
    
    		inserisci (nom,cogn,tel, anonimo, num_account);
    		num_account++;
    	}
    
    	for(i = 0; i < numero; i++)
    	{
    		visualizza(anonimo,i);
    	}
    
    
    	system("PAUSE");
    	return 0;
    }
    
  • Re: Perchè continua a darmi errore?

    Skynet ti chiedo scusa se rispondo solo ora ma non funzionava la rete. Ho provato il programma e, che dire (non poteva essere altrimenti), funziona correttamente, domani ti farò qualche domandina sul passaggio di parametri per referenza e per valore ... credevi di esserti liberato di me eh? ihihih

    Grazie mille davvero, sono alle prime armi e senza di te non saprei proprio come avrei fatto.
    Sei stato gentilissimo e disponibilissimo, vorrei potermi sdebitare ma non so come.

    Ti ringrazio davvero tanto per tutta la pazienza.

    Buonanotte
  • Re: Perchè continua a darmi errore?

    alwaysmyself ha scritto:


    vorrei potermi sdebitare ma non so come.
    Se passi da Torino mi offri una birra e siamo pari.
Devi accedere o registrarti per scrivere nel forum
23 risposte