PDA

Visualizza la versione completa : [C++] Conversione di stringhe lette da file nel tipo float


stewie86
26-06-2007, 19:37
Salve a tutti!
Ho un piccolo problema: ho creato una funzione in c++ che mi legge dei caratteri contenuti in un file e li salva all'interno di una stringa.La funzione dovrebbe anche convertire la stringa in un float ma usando la funzione atof non riesco più a compilare il sorgente.Potreste indicarmi una via alternativa?
Grazie a tutti

MItaly
26-06-2007, 20:21
Perché cercare vie alternative senza affrontare il vero problema? :rollo: Che errore ti dà il compilatore?

zero85
26-06-2007, 20:21
Non conoscendo i dettagli implementativi, quindi non sapendo se realmente ti serve ottenere i valori come stringhe ti consiglio di leggerli direttamente come float:


#include <iostream>
#include <fstream>

using namespace std;

int main(){
float n;
ifstream input("prova.txt",ifstream::out);
if(!input.good()){
cout << "errore nella lettura del file." << endl;
return 1;
}
while(!input.eof()){
input >> n;
cout << n << endl;
}
input.close();
return 0;
}


nel caso ti serva assolutamente leggerli come stringa e in seguito convertirli, ti consiglio di postare gli errori del compilatore e il codice in modo da poter capire dove sta il problema altrimenti serve la palla di vetro

stewie86
27-06-2007, 18:47
intanto grazie a tutti per i post...

L'errore durante la compilazione è:" cannot convert `std::string' to `const char*' for argument `1' to `double atof(const char*)' "
Ora ho capito male o una stringa e un array di caratteri sono la stessa cosa? Quindi quel "const char*" non dovrebbe essere il puntatore al primo elemento di un array di char? :bhò:

In effetti il problema sarebbe risolto se leggessi direttamente come float. Il fatto è, però, che la funzione legge un carattere alla volta (per identificare quale deve effettivamente trattare come float e quale no, visto che la stringa è alfanumerica) e alla fine concatena tutti i caratteri in modo da formare la stringa che poi deve essere convertita.

spero che il post sia abbastanza chiaro altrimenti vedrò di postare la funzione in modo da rendervi la vita più facile. Thanks

zero85
27-06-2007, 19:14
Allora credo di aver capito.
Dovresti trovarti in una situazione simile:


#include <string>
#include <cstring>
#include <cstdio>
#include <cstdlib>

using namespace std;

.....
int main{
....
string letto;
float numero;
ifstream file;
/* Apertura file */
file >> letto;
numero = atof(letto);
}

il problema deriva proprio dal fatto che in c++ le stringhe possono essere o array di char o un oggetto di classe stringa, dall'errore sembra che tu stia usando l'oggetto stringa mentre atof accetta come parametro un array di char. Per ovviare al problema esiste il metodo di conversione della classe string:


numero = atof(letto.c_str());

stewie86
27-06-2007, 19:36
:smack: grazie mille problema risolto...
grazie a tutti per l'aiuto!

Loading