Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - errore atoi
Forum - C/C++ - errore atoi

Avatar
swaqpoli (Normal User)
Newbie


Messaggi: 15
Iscritto: 13/08/2010

Segnala al moderatore
Postato alle 11:17
Sabato, 14/08/2010
ciao a tutti!:k:
ho un problema con la funzione atoi.:-?
ho scritto un programma che prende un file e ne legge le stringhe (tutte formate da numeri).
devo convertire le stringhe in interi e per farlo ho pensato di utilizzare la funzione atoi.

dove sbaglio??
ecco il pezzo di codice in questione:



ifstream file ("file.txt");
string s;


    if(!file)
    {
        cout<<"Errore: file non trovato!"<<endl;
        return -1;
    }

    while(file.good())
    {
        getline(file, s);
        cout<<"m= "<<s<<endl;
  
    }
    

   int m;
   m=atoi (s);  //PASSO AD ATOI LA STRINGA MA NON MI RESTITUISCE L'INTERO :d
   cout<<m;



PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 11:54
Sabato, 14/08/2010
Ciao!

Ho letto il tuo programma, e ho notato che sichiari s come string.

Per la funzione atoi, è necessario passare come argomento nu normale vetore di caratteri; quindi dovrai dichiarare
Codice sorgente - presumibilmente Plain Text

  1. m=atoi(s.c_str() );



Il metodo c_str() converte un oggetto string in un vettore di caratteri.
( Vedi http://www.cplusplus.com/reference/string/string/c_str/ )

Ultima modifica effettuata da Poggi Marco il 14/08/2010 alle 11:55


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
swaqpoli (Normal User)
Newbie


Messaggi: 15
Iscritto: 13/08/2010

Segnala al moderatore
Postato alle 12:12
Sabato, 14/08/2010
così facendo inizia a funziare, (per questo ti ringrazio tanto) solo che:
finchè la stringa è lunga 10caratteri allora funziona, non appena supera 10 caratteri non funziona più e mi stampa un numero di 10 caratteri diverso da quello del file

Ultima modifica effettuata da swaqpoli il 14/08/2010 alle 12:24
PM Quote
Avatar
swaqpoli (Normal User)
Newbie


Messaggi: 15
Iscritto: 13/08/2010

Segnala al moderatore
Postato alle 12:26
Sabato, 14/08/2010
corrego: fino a 9 caratteri funziona, dopo non funziona più e stampa sempre lo stesso valore errato (anche se modifico la stringa di numeri)

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 950
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 12:38
Sabato, 14/08/2010
Siciramente hai un problema di overflov.

Vedi i limiti di ciascun tipo: http://www.cplusplus.com/doc/tutorial/variables/.
Ricorda che i limiti possono variare da compilatore a compilatore.


Nulla va più veloce della luce, quindi rilassati.
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 13:46
Sabato, 14/08/2010
Testo quotato

Postato originariamente da swaqpoli:

corrego: fino a 9 caratteri funziona, dopo non funziona più e stampa sempre lo stesso valore errato (anche se modifico la stringa di numeri)



"generalmente" un int misura 32 bit, che in base dieci sono 9 cifre (precisamente arrivi fino a 4 miliardi e rotti). Basta mettere un numero più grande di quello per andare in overflow e ottenere così un risultato-spazzatura.

Se ti servono più di 9 cifre (fino ad un massimo di 17-18 cifre) usa un long long int.


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote