Oppure

Loading
14/08/10 9:17
swaqpoli
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;


aaa
14/08/10 9:54
Poggi Marco
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
m=atoi(s.c_str() );


Il metodo c_str() converte un oggetto string in un vettore di caratteri.
( Vedi cplusplus.com/reference/string/string/c_str/ )
Ultima modifica effettuata da Poggi Marco 14/08/10 9:55
aaa
14/08/10 10:12
swaqpoli
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 14/08/10 10:24
aaa
14/08/10 10:26
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)
aaa
14/08/10 10:38
Poggi Marco
Siciramente hai un problema di overflov.

Vedi i limiti di ciascun tipo: cplusplus.com/doc/tutorial/variables/.
Ricorda che i limiti possono variare da compilatore a compilatore.
aaa
14/08/10 11:46
TheKaneB
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.
aaa