Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 28-08-2009, 19.02.18   #16
Semi.genius
Guest
 
Messaggi: n/a
Quota:
Inviato da P8257 WebMaster
L'operatore '==' è di tipo binario, è sbagliato utilizzarlo con le stringhe per i confronti, può essere molto pericoloso e crearti anche comportamenti inattesi utilizza

string::compare(...)

Nel secondo caso ti funziona perché viene calcolata la risultante binaria tra le due espressioni (ma non è comunque consigliabile usarlo), nell'altro caso non funziona perché '\0' è un carattere e per giunta un carattere speciale.
mi hai preceduto
  Rispondi citando
Vecchio 28-08-2009, 19.25.44   #17
ArrigoC
Newbie
 
Registrato: 24-08-2009
Messaggi: 8
ArrigoC promette bene
Capito, ho fatto come tu mi hai consigliato, inizializzando le stringhe con "" e usando la funzione empty, ma ora mi da "errore di segmentazione"
Il codice modificato e':

Codice:
void Biblioteca::Aggiungi_volume(int quant,string titolo,string coll,int Q)
{      
         
         int x;
         int j;
         bool t=false;
         
         x = TrovaVolumeDaNome(titolo,Q);
         
         if ( x == -1 )
         {
            for (j=0; j<Q && !t;j++) 
            {
                if ( a[j].nomevol.empty() )
                {
                   a[j].nomevol = titolo;
                   a[j].quantitadisponibile=quant;
                   a[j].collocazione = coll; 
                   t=true;                               
                }
            }
            
            if (j==Q)
            cout<<"biblioteca piena.\n";     
                               
            }
         else
             a[x].quantitadisponibile=(a[x].quantitadisponibile)+quant;
}
Stavo pensando al fatto che hai detto, ossia che a[j] l'ho dichiarata come variabile globale. Io non l'ho fatto, perchè l'ho dichiarato come membro di una classe ( membro privato ) e sò che le funzioni membro della classe possono accedere ai membri privati della stessa classe
ArrigoC non è collegato   Rispondi citando
Vecchio 28-08-2009, 19.35.26   #18
Semi.genius
Guest
 
Messaggi: n/a
Quota:
Inviato da ArrigoC
Capito, ho fatto come tu mi hai consigliato, inizializzando le stringhe con "" e usando la funzione empty, ma ora mi da "errore di segmentazione"
Il codice modificato e':

Codice:
void Biblioteca::Aggiungi_volume(int quant,string titolo,string coll,int Q)
{      
         
         int x;
         int j;
         bool t=false;
         
         x = TrovaVolumeDaNome(titolo,Q);
         
         if ( x == -1 )
         {
            for (j=0; j<Q && !t;j++) 
            {
                if ( a[j].nomevol.empty() )
                {
                   a[j].nomevol = titolo;
                   a[j].quantitadisponibile=quant;
                   a[j].collocazione = coll; 
                   t=true;                               
                }
            }
            
            if (j==Q)
            cout<<"biblioteca piena.\n";     
                               
            }
         else
             a[x].quantitadisponibile=(a[x].quantitadisponibile)+quant;
}
Stavo pensando al fatto che hai detto, ossia che a[j] l'ho dichiarata come variabile globale. Io non l'ho fatto, perchè l'ho dichiarato come membro di una classe ( membro privato ) e sò che le funzioni membro della classe possono accedere ai membri privati della stessa classe
ah ok, allora va bene, non vedendo gli attributi della classe pensavo che l'avevi dichiarata al di fuori

L'errore di segmentazione lo avrai probabilmente perché l'indice j del for supera la dimensione dell'array a e perciò va a controllare campi al di fuori "del tuo dominio" finché supera il segmento che il sistema operativo ti ha offerto. controlla bene il funzionamento del programma
  Rispondi citando
Vecchio 28-08-2009, 19.45.02   #19
ArrigoC
Newbie
 
Registrato: 24-08-2009
Messaggi: 8
ArrigoC promette bene
Controllato e ricontrollato, anche con il debugger, e mi dà errore alla comparazione delle stringhe. ho scritto:

Codice:
int Biblioteca::TrovaVolumeDaNome (string titolo,int Q)
{
         for (int i=0;i<Q;i++)
             if (titolo.compare(a[i].nomevol)==0) // qui dà errore
                return i;
         else 
              return -1;
         
}
e se dà errore lì penso dia errore anche alla funzione successiva

Codice:
void Biblioteca::Aggiungi_volume(int quant,string titolo,string coll,int Q)
{      
         
         int x;
         int j;
         bool t=false;
         
         x = TrovaVolumeDaNome(titolo,Q);
         
         if ( x == -1 )
         {
            for (j=0; j<Q && !t;j++) 
            {
                if ( a[j].nomevol.empty() )
                {
                   a[j].nomevol = titolo;
                   a[j].quantitadisponibile=quant;
                   a[j].collocazione = coll; 
                   t=true;                               
                }
            }
            
            if (j==Q)
            cout<<"biblioteca piena.\n";     
                               
            }
         else
             a[x].quantitadisponibile=(a[x].quantitadisponibile)+quant;
}
ArrigoC non è collegato   Rispondi citando
Vecchio 28-08-2009, 19.49.51   #20
Semi.genius
Guest
 
Messaggi: n/a
Quota:
Inviato da ArrigoC
Controllato e ricontrollato, anche con il debugger, e mi dà errore alla comparazione delle stringhe. ho scritto:

Codice:
int Biblioteca::TrovaVolumeDaNome (string titolo,int Q)
{
         for (int i=0;i<Q;i++)
             if (titolo.compare(a[i].nomevol)==0) // qui dà errore
                return i;
         else 
              return -1;
         
}
e se dà errore lì penso dia errore anche alla funzione successiva

Codice:
void Biblioteca::Aggiungi_volume(int quant,string titolo,string coll,int Q)
{      
         
         int x;
         int j;
         bool t=false;
         
         x = TrovaVolumeDaNome(titolo,Q);
         
         if ( x == -1 )
         {
            for (j=0; j<Q && !t;j++) 
            {
                if ( a[j].nomevol.empty() )
                {
                   a[j].nomevol = titolo;
                   a[j].quantitadisponibile=quant;
                   a[j].collocazione = coll; 
                   t=true;                               
                }
            }
            
            if (j==Q)
            cout<<"biblioteca piena.\n";     
                               
            }
         else
             a[x].quantitadisponibile=(a[x].quantitadisponibile)+quant;
}
1. controlla se titolo è una stringa
2. controlla se l'indice i non va fuori la grandezza dell'array

ps. leggi pm e se puoi allega lintero programma
  Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Masterizzare una copia di back up del s.o. fisiologohifi Masterizzazione Giochi Games 6 14-12-2006 17.15.20
RIAA: ma quale diritto di copia? Macao Segnalazioni Web 0 20-02-2006 01.15.03
Copia privata, si può ??? Macao Segnalazioni Web 12 15-10-2004 19.17.23
Costruttore di copia C++ GiulioCesare Programmazione 8 01-07-2004 10.31.25
vecchi trucchi ma su xp? top gun Windows 7/Vista/XP/ 2003 13 02-03-2004 11.31.48

Orario GMT +2. Ora sono le: 04.00.34.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.