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

    [c] problema urgente array

    Salve a tutti, ho un problema urgente che non riesco a risolvere..
    Ho una funzione nel main che restituisce un array contenente la formula..
    La funzione per ottenere la formula è questa:

    codice:
    /* Definizione della funzione acquisisci_formula_logica_predicati */
    char* acquisisci_formula_logica_predicati(void)
    {
            char  *array_momentaneo, 
              *array_momentaneo2,     /* Array momentaneo formula */
     
        *formula,
        carattere_acquisito;    /* Variabile formula */
        
        int 	 j = 0,			 /* Indice array momentaneo */
                     i = 0,
                     k = 0,
                     max = 1,
                     l = 1;
        
        /* Acquisizione formula */
        /* Allocazione memoria */
        formula = (char *) calloc(max, sizeof (char));
        
        /* Digitazione formula */
        printf("\nDigitare la formula:\n\n\t");
        i=0;
        /* Acquisizione formula */
        while ((carattere_acquisito = getchar()) != '\n')
        {
            if ((i % max) == 0)
              formula = (char*) realloc(formula,((l += max)*sizeof(char)));
            formula[i]= carattere_acquisito;
            i++;
        }
        /* Assegnamento terminazione */
        formula = (char*) realloc(formula,((l += max)*sizeof(char)));
        formula[i] = '\0';
        printf("\n");
        l=1;
        max=1;
        i=0;
        /* Allocazione memoria */
        array_momentaneo = (char *) calloc(max, sizeof (char));
        /* Elisione spazi e tabulazioni */
        while(formula[i] != '\0')
        {
        if ((formula[i] != ' ') && (formula[i] != '\t'))
            {
                /* Memorizzazione formula */
                array_momentaneo = (char *) realloc(array_momentaneo, ((l += max)*sizeof(char)));
                array_momentaneo[j] = formula[i];
                j++;
                i++;
            }
            else i++;
      }
     array_momentaneo = (char *) realloc(array_momentaneo, ((l += max)*sizeof(char)));
     array_momentaneo[j] = '\0';      
        i = 0;
        j = 0;
        max = 1;
        l = 1;
        k = 0;
        controlli_not(array_momentaneo,formula);
        /* Allocazione memoria */   
        array_momentaneo2 = (char *)calloc(max, sizeof (char));
        /* Elisioni not */
        while(array_momentaneo[j] != '\0')
        {
          
            if (array_momentaneo[j] != '1')
            {
                /* Memorizzazione formula */
                array_momentaneo2 = (char*) realloc(array_momentaneo2,((l += max)*sizeof(char)));
                array_momentaneo2[k] = array_momentaneo[j];
                k++;
                j++;
            }
            else j++;
            }
    
        array_momentaneo2 = (char*) realloc(array_momentaneo2,((l += max)*sizeof(char)));
        array_momentaneo2[k] = '\0';
        array_momentaneo[0] = '\0';
        free(formula);    
        formula = (char*) calloc((l += max),sizeof(char));
        strcpy(formula, array_momentaneo2);
        array_momentaneo2[0] = '\0';
        /* Inserimento formula nel array principale */
        free(array_momentaneo2);
         i = 0;
        j = 0;
        k = 0;
        max = 1;
        l = 1;
        controlli(formula);
       
       
    
        return formula;
    }

    Gli errori che trovo sono questi:
    se inserisco una formula sbagliata ad esempio lunga 4 poi una lunga 10 non me la prende o mi da un errore di memoria...
    Poi alcune volte se la prima volta metto una formula errata e la seconda giusta questa non mi ritorna al main...

    Durante l'acquisizione della formula ci sono due controlli:
    i primi controlli not che se trovo errore mi riparte questa funzione e prima di ripartire ho messo un free(formula)
    Poi i controlli alla fine che se trova errore fa la stessa cosa...

    Come posso fare????

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

    Moderazione

    Alcune considerazioni:

    1) Parole come "Urgente" nel titolo sono vietate dal Regolamento interno poichè nessuna discussione è urgente.

    2) Il codice va postato indentato all'interno degli appositi tag CODE, in modo da renderlo leggibile, mantenendo formattazione ed indentazione.

    Sistemo io per quanto possibile.


    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

  3. #3
    Ciao, scusa per gli errori
    Hai idea di come sistemare?

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.