Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Ricerca personalizzata

Problema con il debuger di codeblocks sotto linux 10.04

Linguaggi e sistemi

Moderatori: Foto Utenteposta10100, Foto UtentePaolino, Foto Utentec1b8, Foto Utentephylum

0
voti

[1] Problema con il debuger di codeblocks sotto linux 10.04

Messaggioda Foto Utentealien75 » 5 dic 2011, 23:11

Dato il seguente sorgente:

Codice: Seleziona tutto
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<errno.h>
//#include <windows.h>   //solo sotto window
#include <unistd.h>      //solo sotto linux
#include <termios.h>
/*numero massmo di voci inseribili nella rubrica*/
#define MAXVOCI 4000
#define INIZIALI 4
/*numero massimo caratteri dei comandi*/
#define MAX 200
/*numero di iniziali di ricerca del comando 'lista '*/
#define N_INIZIALI 4
/*definizione struttura di memorizzazione nomi e numeri della rubrica*/
struct rubrica
{
    char nome[200];
    char telefono[40];
};
/*dichiarazione numero massimo voci della rubrica*/
struct rubrica vocerub[MAXVOCI];
/*dichiarazione numero massimo di voci su rubrica_stampa */
struct rubrica vocestampa[MAXVOCI], vocestampa1[MAXVOCI];
/*dichiarazione buffer per salvataggio momentaneo nome[]*/
struct rubrica vocex;



/*procedure di implementazione comandi*/
int modifica(char *posizione);
int cancella(char *posizione);
void nuovo(void);
void help(void);
void visualizza(void);
void vis_tutta_rubrica(void);
int ordina(int select);
void stampa(int max_voci, struct rubrica *indirizzo);
void print(struct rubrica *indirizzo);
/*procedure di caricamento e salvataggio voci in file su disco*/
void carica(void);
void nuova_voce(long riga);
int salva_nuova(void);
int salva(struct rubrica *indirizzo);
int inserisci(void);
int converti(void);
int test(void);
void pulisci( struct rubrica *indirizzo);
int conta(void);
/*variabili globali*/
char temp2[23]="Rubrica.txt";
//char temp2[23]="\\Rubrica.txt";   //solo sotto window
char temp3[400];
char nome_file[500];
char modoa[3]="a+";
char modow[3]="w+";
char modor[2]="r";
char ch, buffer[MAX+1], buffer1[201], buffer2[201], buffer3[201], Nome[200];
char *p;
/*buffer per testare il tipo di lettera delle iniziali*/
char *lettera="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
char *path;
int x, y, stampa1=0, ord, enable=0, count;
long offset=0, n_voce=0;
FILE *fp;


int main()
{
/*presentazione rubrica*/
    printf("\n============================RUBRICA TELEFONICA=================================");
    printf("\n\nDigitare 'help' per avere la lista dei comandi\n\n");
    //GetCurrentDirectory(200, temp3);   //solo sotto window
    getcwd (temp3, 400);
    strcat(nome_file,temp3);
    strcat(nome_file,temp2);
    carica();
    printf("\nn_voce=%ld",n_voce);
    while(1)
    {
        x=0;
        /*inserimento buffer del comando*/
        printf("\n\n\n>");
        //imposta parametri per tcflush()
        struct termios tios;
        int f = fileno(stdin);
        tcgetattr(f, &tios);
        tios.c_lflag &= ~ICANON;
        tios.c_cc[VMIN] = 1;
        tios.c_cc[VTIME] = 0;
        tcsetattr(f, TCSAFLUSH, &tios);

        //inserisci comando e voce ed inseriscili dentro a buffer[]
        tcflush(f, TCIFLUSH);
        fgets(buffer, sizeof(buffer), stdin);
        //inserisci terminatore al posto di \n alla fine del comando
        if ((p = strchr(buffer, '\n')) != NULL)    *p = '\0';
        /*copia buffer[] in buffer1[] per poi testare buffer1[] in modo da non alterare il contenuto di buffer[]*/
        strcpy(buffer1,buffer);
        //scorri lungo il comando contenuto in buffer1[] finche trovi lo spazio o l' acapo  "\n"
        //ed inserisci la posizione dello spazio dopo il comando dentro a x
        x=0;
        do
        {
            x++;
        }while(isgraph(buffer1[x])!=0 || buffer1[x]=="\n");
        x++;
        //trasferisci il comando in buffer2
        strncpy(buffer2,buffer1,x);
        count=0;
        if ((p = strchr(buffer1, '\n')) != NULL)    *p = '\0';
        //trasferisci la voce in buffer3
        strcpy((buffer3),(buffer1+x));
        if ((p = strchr(buffer3, '\0')) != NULL)    *p = '\n';
        if(test()==1)    printf("\nComando errato\n");
        if ((p = strchr(buffer3, '\n')) != NULL) *(p+1) = '\0';
        /*testa il tipo di comando inserito*/
        if(strcmp(buffer2,"lista ")==0)    //confronta il comando contenuto in buffer1 (il comando dato da tastiera)
        {                                  //con "lista "
            if(isgraph(*buffer3))      visualizza();  //e se corrispondono e se dopo lo spazio c'e' uan lettera
                                                           //vai a visualizza() che consente di stampare le voci
                                                           //con le iniziali indicate dalla lettera dopo il comando
            continue;
        }
        if(strcmp(buffer2,"lista")==0)
        {
            x=0;
            do
            {
                x++;
            }while(buffer2[x]!=0);
            vis_tutta_rubrica();
            continue;
        }
        if(strcmp(buffer2,"modifica ")==0)
        {
            switch(modifica(buffer3))
         {
         case 1:
            printf("\nVoce inesistente\n");
            break;
         case 2:
            printf("\nVoce modificata\n");
            break;
         case 0:
            printf("\nVoce inalterata\n");
            break;
         }
            continue;
        }
        if(strcmp(buffer2,"cancella ")==0)
        {
            switch(cancella(buffer3))
            {
         case 0:
            printf("\nVoci cancellate\n");
            break;
         case 1:
            printf("\nVoce inesistente\n");
            break;
         case 2:
            printf("\nVoce cancellata\n");
            break;
            }
            continue;
        }
        if(strcmp(buffer2,"nuova")==0)
        {
            if(n_voce==MAXVOCI)
            {
                printf("\nImpossibile inserire una nuova voce: rubrica piena\n");
                continue;
            }
            nuovo();
            continue;
        }
        if(strcmp(buffer2,"help")==0)
        {
            help();
            continue;
        }
        if(strcmp(buffer2,"esci")==0)     break;
        if(strcmp(buffer2,"\0")==0)        continue;
    }
    return 0;
}


/*procedura per modificare i nomi ed i numeri della rubrica*/
int modifica(char *posizione)
{
    char p_nome[50];
    char p_cognome[49];
    char p_telefono[40];
    long voce;
    int x;
    fp=fopen(nome_file,"a+");  //usare modalita 'a+' per salvataggio voci nuove
    for(voce=0;voce<n_voce+1;voce++)
    {
        if(!(strcmp(posizione,vocerub[voce].nome)))
        {
            printf("\n\nInserire nuovo nome e cognome:");
            scanf("%s%s", p_nome, p_cognome);
            strncpy(vocerub[voce].nome,p_nome,50);
            strncat(vocerub[voce].nome," ",1);
            strncat(vocerub[voce].nome,p_cognome,49);
            strncat(vocerub[voce].nome,"\n",2);
            printf("\nInserire nuovo numero di telefono:");
            scanf("%s", p_telefono);
            strncpy(vocerub[voce].telefono,p_telefono,40);
            strncat(vocerub[voce].telefono,"\n",2);
            if(salva(vocerub)==1)    return 0;
            return 2;
        }
    }
    if(voce==n_voce)    return 1;
}




/*procedura per cancellare un numero dalla rubrica*/
int cancella(char *posizione)
{
    long voce;
    int pos;
    char stringa[80]="rubrica";
    //cancella la voce indicata dal puntatore a vocerub[] 'posizione'
   if(!(strcmp(posizione,stringa)))
    {
        for(voce=0;voce<n_voce+1;voce++)
        {
            //cancella le prime 4 lettere del nome contenuto in vocerub[]
            for(pos=0;pos<4;pos++)
                        vocerub[voce].nome[pos]='0';
        }
        if(salva(vocerub)==1)    return 3;
        else
        {
            return 1;
            enable=1;
        }
      n_voce=0;
      return 0;
    }
   else
    {
        for(voce=0;voce<n_voce+1;voce++)
        {
            if(vocerub[voce].nome[0]==0)      continue;
            strncpy(vocex.nome,vocerub[voce].nome,200);
            if(!(strncmp(posizione,vocerub[voce].nome,200)))
            {
                for(pos=0;pos<4;pos++)
                        vocerub[voce].nome[pos]='0';
                if(salva(vocerub)==1)    return 3;
                else
                {
                    return 2;
                    enable=1;
                }
            }
        }
    }
    return 1;
}


//procedura per la cancellazione di una voce dal file Rubrica.txt
int salva(struct rubrica *indirizzo)
{
    int voce;
    remove(nome_file);
    fp=fopen(nome_file,"w+");  //usare modalita 'w+' per salvataggio voci all' inizio cancellando quele vecchie
    if(fp==NULL) {printf("\nFile delle voci inesistente"); return 1;}
    for(voce=0;voce<n_voce+1;voce++)
    {
        fputs((indirizzo+voce)->nome,fp);
        fputs((indirizzo+voce)->telefono,fp);
    }
    fflush(fp);
    fclose(fp);
    return 0;
}


//procedura per inserire un nuovo numero
void nuovo(void)
{
    int x=0, y;
    long voce=0;
    do{
        y=0;
        while(voce<n_voce)
        {
            //se trovi un buco vuoto nella struttura dati inserisci una nuova voce
            if(vocerub[voce].nome[0]=='0')
            {
                if(n_voce==0)      n_voce++;
             nuova_voce(voce);
             strncat(vocerub[voce].nome,"\n",2);
             strncat(vocerub[voce].telefono,"\n",2);
             remove(nome_file);
             fp=fopen(nome_file,"a+");  //usare modalita 'a+' per salvataggio voci nuove
            if(fp==NULL)
                {
                    printf("\nErrore nell' apertura del file salvataggio rubrica\n");
                    fclose(fp);
                    return;
                }
                salva(vocerub);
                y=1;
                return;
            }
            voce++;     //aggiorna numero di voci scansionate
        }
        //se non c'e' nessuna voce cancellata nella struttura
        //metti la voce alla  fine di vocerub[]
        nuova_voce(n_voce);
        salva_nuova();
        n_voce++;
        fp=fopen(nome_file,"a+");      //usare modalita 'a+' per salvataggio voci nuove
        if(fp==NULL)
        {
            printf("\nErrore nell' apertura del file salvataggio rubrica\n");
            return;
        }
        if(n_voce==MAXVOCI)
        {
            printf("\nImpossibile inserire una nuova voce: rubrica piena\n");
            return;
        }
        x=inserisci();    //se e' stato inserito 1 allora ripeti ciclo inserimento senno esci
    }while(x==1);
}


//procedura per visualizzare i comandi
void help(void)
{
    printf("\n\n'lista'   comando per dare la lista completa della rubrica");
    printf("\n\n'lista abc..etc'      aggiungendo la prima, la seconda o la terza ini");
    printf("\n            ziale si puo' specificare quale parte della rub ");
    printf("            rica si vuole visualizzare");
    printf("\n\n'modifica nome da modificare'   comando per modificare il nome");
    printf("                     o il numero di una voce della rubrica.");
    printf("\n\n'cancella nome da cancellare'   comando per cancellare una voce");
    printf("\n\n'nuova'            comando per inserire una nuova voce");
    printf("\n\n'esci'            comando per uscire dal programma\n\n");
}

//procedura per la visualizzazione dell'elenco in base alle iniziali dei nomi cercati
void visualizza(void)
{
    //pulisci le due istanze ausiliarie
    //pulisci(vocestampa);
    //pulisci(vocestampa1);
    if(ordina(1)==0)   //chiama procedura di ordinamento in ordine
    {                 //dalla prima alla quarta voce
        printf("\nNessuna voce trovata con questa iniziale\n");
        return;
    }
    stampa(-1,vocestampa1);   //se il primo parametro e' uguale a -1 stampa solo le voci con le iniziali indicate dopo il comando 'lista'
    return;
}


//procedura per salvare le voci cercate nell' ordine di ricerca richiesto, dentro il buffer di stampa
int ordina(int select)
{
//cicli di trasferimento da struttura vocerub[] a struttura di vocestampa[]
    int posto=-1, voce=0, x=1, y, z, pos=0, stp=0, lett, indice;
    if(select==0)     lett=27;
    else if(select==1)
    {
        lett=0;
        indice=converti();
    }
    while(x!=5)
    {
        switch(x){
        case 1:
        {
            for(y=0;y<lett;y++)        //cambia prima iniziale da testare
            {
                if(select==0) indice=y;
                while(voce!=n_voce)   //gira finche la lista di vocerub finisce
                {
                    if(vocerub[voce].nome[0]==lettera[indice] || vocerub[voce].nome[0]==lettera[indice+26])   //copia solo le voci con la prima iniziale indicata
                    {
                        strcpy(vocestampa[stp].nome,vocerub[voce].nome);
                        strcpy(vocestampa[stp].telefono,vocerub[voce].telefono);
                        stp++;
                    }
                    voce++;
                }
                voce=0;
            }
            stp=0;
            break;
        }
        case 2:
        {
            for(y=0;y<27;y++)      //cambia prima iniziale da testare
            {
                for(z=0;z<27;z++)       //cambia seconda iniziale da testare
                {
                    while(voce!=n_voce)   //gira finche la lista di vocerub finisce
                    {
                        if(vocestampa[voce].nome[0]==lettera[y] || vocestampa[voce].nome[0]==lettera[y+26])  //copia solo le voci con la prima iniziale indicata
                        {
                            if(vocestampa[voce].nome[1]==lettera[z] || vocestampa[stp].nome[1]==lettera[z+26]) //copia solo le voci con la seconda iniziale
                            {                                                                               //maiuscola o minuscola indicata
                                if(strcmp(vocestampa1[voce-1].nome,vocestampa1[voce].nome))   //non copiare due volte la stessa voce
                                {
                                    strcpy(vocestampa1[stp].nome,vocestampa[voce].nome);
                                    strcpy(vocestampa1[stp].telefono,vocestampa[voce].telefono);
                                    stp++;
                                }
                            }
                        }
                        voce++;
                    }
                    voce=0;
                }
                voce=0;
            }
            stp=0;
            break;
        }
        case 3:
        {
            for(y=0;y<27;y++)        //cambia prima iniziale da testare
            {
                for(z=0;z<27;z++)       //cambia terza iniziale da testare
                {
                    while(voce!=n_voce)   //gira finche la lista di vocerub finisce
                    {
                        if(vocestampa1[voce].nome[0]==lettera[y] || vocestampa1[voce].nome[0]==lettera[y+26])  //copia solo le voci con la prima iniziale indicata
                        {
                            if(vocestampa1[voce].nome[2]==lettera[z] || vocestampa1[voce].nome[2]==lettera[z+26]) //copia solo le voci con la terza iniziale
                            {                                                                                          //maiuscola e minuscola indicata
                                if(strcmp(vocestampa1[voce-1].nome,vocestampa1[voce].nome))   //non copiare due volte la stessa voce
                                {
                                    strcpy(vocestampa[stp].nome,vocestampa1[voce].nome);
                                    strcpy(vocestampa[stp].telefono,vocestampa1[voce].telefono);
                                    stp++;
                                }
                            }
                        }
                        voce++;
                    }
                    voce=0;
                }
            voce=0;
            }
            stp=0;
            break;
        }
        case 4:
        {
            for(y=0;y<27;y++)        //cambia prima iniziale da testare
            {
                for(z=0;z<27;z++)       //cambia quarta iniziale da testare
                {
                    while(voce!=n_voce)   //gira finche la lista di vocerub finisce
                    {
                        if(vocestampa[voce].nome[0]==lettera[y] || vocestampa[voce].nome[0]==lettera[y+26])    //copia solo le voci con la prima iniziale indicata
                        {
                            if(vocestampa[voce].nome[3]==lettera[z] || vocestampa[voce].nome[3]==lettera[z+26])     //copia solo le voci con la quarta iniziale indicata
                            {
                                if(strcmp(vocestampa[voce-1].nome,vocestampa[voce].nome))
                                {
                                    strcpy(vocestampa1[stp].nome,vocestampa[voce].nome);
                                    strcpy(vocestampa1[stp].telefono,vocestampa[voce].telefono);
                                    stp++;
                                }
                            }
                        }
                        voce++;
                    }
                    voce=0;
                }
                voce=0;
            }
            stp=0;
            break;
        }
        }
        x++;
    }
    return n_voce;
}


//procedura per stampare le voci precedentemente salvate dentro al buffer di stampa
void stampa(int max_voci, struct rubrica *indirizzo)
{
    int riga=0, y;
    if(max_voci==n_voce)
    {
        max_voci=conta();
        while(riga<max_voci || (indirizzo+riga)->nome[0]!='0')
        {
            if((indirizzo+riga)->nome[0]!='0')   //stampa solo le voci non cancellate
            {
                if(strcmp((indirizzo+(riga-1))->nome,(indirizzo+riga)->nome))  //non stampare le copie delle voci
                {
                    printf("\n\nNome:%s",(indirizzo+riga)->nome);
                    printf("\nTelefono:%s",(indirizzo+(riga))->telefono);
                    riga++;
                }
            }
        }
    printf("\n");
    stampa1=0;
    }
    else if(max_voci==-1)
    {
       //CONTROLLARE DA QUA IN GIU'
       while(riga!=n_voce+1)
       {
        if((indirizzo+riga)->nome[0]==buffer[x+1])      //testa se c'e' la prima iniziale
        {
            if(*((buffer+(x+1))+1)=='\n'){      //se no
                print((indirizzo+riga));
                riga++;
                continue;
            }
            //testa se ce ne sono altre
            if((indirizzo+riga)->nome[1]==*((buffer+(x+1))+1))    //testa se c'e' una seconda iniziale
            {
                if(*((buffer+(x+1))+2)=='\n'){      //se si, testa se ce ne sono altre
                    print((indirizzo+riga));
                    riga++;
                    continue;
                }
                if((indirizzo+riga)->nome[2]==*((buffer+(x+1))+2))   //testa se c'e' una terza iniziale
                {
                    if(*((buffer+(x+1))+3)=='\n'){      //se si, testa se ce ne sono altre
                        print((indirizzo+riga));
                        riga++;
                        continue;
                    }
                    if((indirizzo+riga)->nome[3]==*((buffer+(x+1))+3))   //testa se c'e' una quarta iniziale
                    {
                        if(*((buffer+(x+1))+4)=='\n'){      //se dopo la quarta iniziale non ce ne sono altre stampa la voce
                            print((indirizzo+riga));
                            riga++;
                            continue;
                        }
                    }
                }
            }
        }
        riga++;
       }
    }
}


//procedura di visualizzazine della rubrica intera
void vis_tutta_rubrica(void)
{
    //pulisci le due istanze ausiliarie
    //pulisci(vocestampa);
    //pulisci(vocestampa1);
    carica();
    if(!(ordina(0)))     //chiama funzione per l' ordinammento alfabetico delle voci
    {                   //dalla prima alla 4^ iniziale
        printf("\nNessuna voce esistente nella rubrica\n");
        return;
    }
    stampa(n_voce,vocestampa1);   //stampa il risultato dell' ordinamento
                                  //il risultato viene messo in vocestampa1[]
}


//procedura di caricamento file nella struttura dati della rubrica
void carica(void)
{
    char nome1[200];
    char telefono1[40];
    char nome;
    long voce=0;
    long val;
    int x;
    fp=fopen(nome_file,"r");
    if(fp==NULL) {printf("\nFile delle voci inesistente"); return;}
    do{
        fgets(nome1,200,fp);
        fgets(telefono1,40,fp);
        strcpy(vocerub[voce].nome,nome1);
        strcpy(vocerub[voce].telefono,telefono1);
        voce++;
    }while(!feof(fp));   //cicla finche finisce il file e quindi sono state caricate dal file alla struttura tutte le voci esistenti
    //aggiorna la variabile di conteggio delle voci i nrubrica togliendo una voce
    voce--;
    //cancella la ripetizione dell'ultima voce
    strncpy(vocerub[voce].nome,"\000",4);
    strncpy(vocerub[voce].telefono,"\000",4);
    n_voce=voce;
    fclose(fp);
}


//procedura di salvataggio file
int salva_nuova(void)
{
    char type[2];
    long one=n_voce-1;
    //posiziona il segnaposto alla fine del file
    fseek(fp,(one*sizeof(struct rubrica)),SEEK_SET);
    //e scrivi il nome ed il telefono della voce
    fputs(vocerub[n_voce].nome,fp);
    fputs("\n",fp);     //vai a capo
    fputs(vocerub[n_voce].telefono,fp);
    fputs("\n",fp);     //vai a capo
    fclose(fp);
    fflush(fp);
    return 0;
}


//procedura per l'inserimento di nuove voci
void nuova_voce(long riga)
{
    int x;
    char digit1[50];
    char digit2[49];
    printf("\n\nInserire nome e cognome:");
    scanf("%s%s", digit1, digit2);
    strncpy(vocerub[riga].nome,digit1,50);
    strncat(vocerub[riga].nome," ",1);
    strncat(vocerub[riga].nome,digit2,49);
    printf("Inserire numero telefonico:");
    scanf("%s",vocerub[riga].telefono);
    fp=fopen(nome_file,"a+");  //usare modalita 'a+' per salvataggio voci nuove
}




//procedura di richiesta inserimento nuova voce
int inserisci(void)
{
    int x;
    do{
       printf("\n\nVuoi inserire un' altra voce? (1=si  0=no)");
      scanf("%d",&x);
   }while(x>1 || x<0);
    return x;

}





//procedura per stampare le voci selezionate
void print(struct rubrica *indirizzo)
{
    printf("\n\nNome:%s",indirizzo->nome);
    printf("Telefono:%s",(indirizzo+1)->telefono);
}

//procedura di conversione della lettera contenuta dopo il comando 'lista ' in posizione dentro al buffer 'lettera'
int converti(void)
{
    int y;
    for(y=0;y<27;y++)
    {
        if(buffer[x+1]==*(lettera+y) || buffer[x+1]==*(lettera+y+26))  return y;
    }
}


//funzione per testare i comandi
int test(void)
{
    if(strcmp(buffer2,"lista ")!=0 && strcmp(buffer2,"lista")!=0)
    {
        if(strcmp(buffer2,"modifica ")!=0 && strcmp(buffer2,"cancella ")!=0)
        {
             if(strcmp(buffer2,"nuova")!=0 && strcmp(buffer2,"help")!=0)
                 if(strcmp(buffer2,"esci")!=0)    return 1;
        }
    }
    return 0;
}

//funzione per pulire le istanze di servizio
void pulisci( struct rubrica *indirizzo)
{
    int riga;
    for(riga=0;riga<n_voce+1;riga++)
    {
        (indirizzo+riga)->nome[0]='0';
        (indirizzo+riga)->telefono[0]='0';
    }
}

//funzione per contare solo il numero di voci esistenti non cancellate presenti in vocerub
int conta(void)
{
    int conta=0;
    int voce;
    for(voce=0;voce<n_voce+1;voce++)
    {
        if(vocerub[voce].nome!='0')     conta++;
    }
    return conta;
}


una volta compilato ed eseguito mi succede che inserendo le seguenti quattro voci:

Codice: Seleziona tutto
fabio ddd
333
ddd dd
33
uuu uu
11
llll lll
11


e dopo aver inserito il comando 'lista' ottengo:

Codice: Seleziona tutto
>lista

Nome: fabio ddd
Telefono: 333

Nome: llll lll
Telefono:11

Nome:
[code]

quindi invecie di visualizzarle tutte e 4 me ne visualizza solo due e della terza solo la parola 'Nome' e non capisco il perche'.
Il secondo problema consiste nel fatto che dando qualsiasi comando esso viene eseguito tranne il comando 'listra l'   (per avere solo la lista delle voci con iniziale 'l')  ottengo:

[code]
>lista l


>


ossia mi non mi viene eseguito il comando, il problema e' che una volta inseriti i vari break-point per poter capire dov'e' il problema ed avviato il debuger, dopo aver inserito
il comando 'lista l' non avviene il salto nell' esecuzione a partire dalla funzione in questione
provvista di break-point.
Non capisco perche' mi succede questo e' come se il debuger non vedesse i break-point o come se non ci fossero.
Nessun mi puo' dare una mano a capire cosa e' successo? #-o #-o
Avatar utente
Foto Utentealien75
11 1 3 5
Frequentatore
Frequentatore
 
Messaggi: 248
Iscritto il: 31 lug 2011, 13:08

0
voti

[2] Re: Problema con il debuger di codeblocks sotto linux 10.04

Messaggioda Foto Utenteposta10100 » 5 dic 2011, 23:19

Il debugger di Code::Blocks a volte da i numeri.
Fagli stampare qualche stringa e vedi dove passa e che dati ha in quel momento.
Purtroppo con le soluzioni free a volte si hanno questi problemi...

O_/
http://millefori.altervista.org Il mio tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa.
A. Einstein

Strumento per formule
Avatar utente
Foto Utenteposta10100
3.160 4 8 13
Master
Master
 
Messaggi: 3914
Iscritto il: 4 nov 2006, 23:09

0
voti

[3] Re: Problema con il debuger di codeblocks sotto linux 10.04

Messaggioda Foto Utentesimo85 » 5 dic 2011, 23:33

Fatti un favore, usa gdb ;-)
RTFDS
Avatar utente
Foto Utentesimo85
11,7k 5 10 13
free expert
 
Messaggi: 5091
Iscritto il: 30 ago 2010, 3:59

0
voti

[4] Re: Problema con il debuger di codeblocks sotto linux 10.04

Messaggioda Foto Utentealien75 » 6 dic 2011, 13:14

gohan ha scritto:Fatti un favore, usa gdb ;-)


Infatti sotto codeblocks ho installato proprio gdb ma ho comunque questi problemi.
Che mi dici invecie riguardo al comando 'lista' che si ferma a meta' stampa?
La meta' stampa si verifica pure eseguendo il binario da bash.
Avatar utente
Foto Utentealien75
11 1 3 5
Frequentatore
Frequentatore
 
Messaggi: 248
Iscritto il: 31 lug 2011, 13:08

0
voti

[5] Re: Problema con il debuger di codeblocks sotto linux 10.04

Messaggioda Foto Utenteangus » 6 dic 2011, 16:29

Una curiosità: ma stai gestendo la rubrica in quel modo perché DEVI fare così per forza? o per scelta?
in /dev/null no one can hear you scream
Avatar utente
Foto Utenteangus
3.765 4 6 8
G.Master EY
G.Master EY
 
Messaggi: 2510
Iscritto il: 20 giu 2008, 16:25

0
voti

[6] Re: Problema con il debuger di codeblocks sotto linux 10.04

Messaggioda Foto Utentealien75 » 6 dic 2011, 21:40

angus ha scritto:Una curiosità: ma stai gestendo la rubrica in quel modo perché DEVI fare così per forza? o per scelta?


Ho scelto di gestirla cosi' ma tu come la gestiresti?
Avatar utente
Foto Utentealien75
11 1 3 5
Frequentatore
Frequentatore
 
Messaggi: 248
Iscritto il: 31 lug 2011, 13:08

0
voti

[7] Re: Problema con il debuger di codeblocks sotto linux 10.04

Messaggioda Foto Utenteposta10100 » 6 dic 2011, 21:53

alien75 ha scritto:
Ho scelto di gestirla cosi' ma tu come la gestiresti?

Mi ricorda tanto un progetto fatto per l'esame di informatica1 all'università.

Io opterei per una vera lista di elementi e non su un array di elementi complicato da gestire.
in pratica hai una serie di elementi si tipo rubrica collegati tra loro: ognuno tiene traccia del precedente e del successivo attraverso un puntatore ad un altro elemento di tipo rubrica.

Prova a pensarci e a buttar giù le poche righe di codice per la gestione della lista.

O_/
http://millefori.altervista.org Il mio tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa.
A. Einstein

Strumento per formule
Avatar utente
Foto Utenteposta10100
3.160 4 8 13
Master
Master
 
Messaggi: 3914
Iscritto il: 4 nov 2006, 23:09

0
voti

[8] Re: Problema con il debuger di codeblocks sotto linux 10.04

Messaggioda Foto Utenteangus » 7 dic 2011, 0:06

alien75 ha scritto:Ho scelto di gestirla cosi' ma tu come la gestiresti?

Usando un DB vero e non dei file di testo...
in /dev/null no one can hear you scream
Avatar utente
Foto Utenteangus
3.765 4 6 8
G.Master EY
G.Master EY
 
Messaggi: 2510
Iscritto il: 20 giu 2008, 16:25

3
voti

[9] Re: Problema con il debuger di codeblocks sotto linux 10.04

Messaggioda Foto Utenteposta10100 » 7 dic 2011, 14:35

angus ha scritto:non dei file di testo...

perché non i file di testo?
E' vero possono diventare ingombranti ma sono facili da maneggiare sia in lettura che in scrittura.
Poi li puoi leggere e modificare anche a mano in caso di necessità.
Quando posso li uso, magari in formato XML, se diventa troppo ingombrante comprimo tutto!

O_/
http://millefori.altervista.org Il mio tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa.
A. Einstein

Strumento per formule
Avatar utente
Foto Utenteposta10100
3.160 4 8 13
Master
Master
 
Messaggi: 3914
Iscritto il: 4 nov 2006, 23:09

0
voti

[10] Re: Problema con il debuger di codeblocks sotto linux 10.04

Messaggioda Foto Utenteangus » 7 dic 2011, 14:51

Perché non amo reinventare la ruota ogni volta... se lo scopo è sviluppare un'applicazione. ;-)
(non so se hai dato un'occhiata al codice sopra... ma che succederà quando vorrà metterli in ordine alfabetico :shock: ? )
Se poi è un esercizio per imparare a leggere e scrivere da file di testo, il discorso ovviamente cambia.

Per come sono abituato a lavorare io, una rubrica la realizzerei con un DB senza nemmeno pormi il problema (c'è anche il comodissimo e potente sqlite) poi, per carità, ognuno usa quello che trova più comodo o conveniente in base ad esigenze e risorse.

Inoltre con file di testo, intendevo proprio plain/text, XML è già qualcosa di diverso e con qualche strumento (API) in più... mi risulta che esistano anche dei db che usano nativamente XML...

O_/

edit: per esigenze di (potenziale) compatibilità dei dati con altro software, forse sarebbe il caso di usare un formato "standard", ad esempio Vcard.
in /dev/null no one can hear you scream
Avatar utente
Foto Utenteangus
3.765 4 6 8
G.Master EY
G.Master EY
 
Messaggi: 2510
Iscritto il: 20 giu 2008, 16:25

Prossimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti