Einlesen von Zahlen
-
Hallo,
Wenn ich mit getline() Zahlen einlese, werden die ja in einen String gespeichert.
Damit kann ich jetzt aber nicht bspw. die Modulooperation anwenden, weil dafür ein int benötigt wird.
Wie kann ich meine Zahlen einlesen, sodass die Rückgabe ein Integer oder ein double oder so ist, womit ich rechnen kann.Oder anders:
ifstream fin("Prim_Zahlen.txt"); string B; int i; for(i=0;i<78498;i++){ getline(fin,B,','); }Wie kann ich mit den in B gespeicherten Daten jetzt weiterrechnen.
Also bspw. wie setze ich if(1231234234234%B==0) um ?Grüße,
Slabic
-
Nicht
std::getline()verwenden, sondern denstd::istream::operator>>, denn damit kannst du formatiert einlesen. Wenn du einen String vorliegen hast, kannst du das über einen Stringstream machen (oder sonst direkt in einem anderen Inputstream, z.B.std::ifstream).Schau mal unter diesem Link: http://www.cplusplus.com/reference/iostream/istream/operator>>/
-
da gibts verschiedene möglichkeiten.
entweder du liest die daten mithilfe der streamoperatoren ein (akzeptieren jeden datentyp:f >> zahl >> string; // in der datei könnte stehen 12 textoder du zerlegst den string nach dem auslesen, was aber umständlicher wäre. Paar Stichwörter zum googlen : stringstreams, atoi, atof, strtol, strtod
-
ok, danke.
Wie umgehe ich dabei Zeichen wie ", oder ; oder Zeilenumbrüche"
Einlesen will ich eine Zeile mit vielen Zahlen, durch Kommata getrennt:
2, 3, 5, 7,...
Wenn ichifstream fin("Prim_Zahlen.txt"); int n,j,k; fin >> n >> j >> k;schreibe, geht's nicht...
Edit: ich könnte ja das Komma als sting einlesen und dann ignorieren, denk ich, aber geht's speziell für derartiges Format von Zahl iwie besser?
Bzw. das reicht mir denke ich sogar schon.
-
Du kannst dazu benutzerdefinierte Manipulatoren einrichten.
Es gab zu diesem Thema mal zwei Threads. Werner Salomon hat die Sache besonders gut erklärt:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-210160.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-176361.html
-
Slabic schrieb:
geht's nicht...
"Geht nicht" ist keine besonders gute Fehlerbeschreibung...

Du könntest sowas wie einen Dummy-Char einsetzen, in den du das komma einliest
char dummy; fin >> n >> dummy >> j >> dummy >> k;oder du benutzt istream::ignore: http://www.cplusplus.com/reference/iostream/istream/ignore/
letzteres wäre mein Favourit.
-
Jep, hatte es auch mit dem Dummy-char gemacht.