seltsamer fehler
-
hallo,
@lucky_tux: Danke, allerdings sollte der sinn des programms vorallem in der übung liegen, weshalb ich das doch eher nach meiner variante machenmöchte, auch wenn deine vllt besseris; die muss ich mir nochmal genauer angucken, kenne di libs und befehle gar nicht...@CStoll: danke, kannte die funktionen gar nicht, werd sie bestimmt mal gebrauchen, allerdings, will ich erstmal viel selber machen, da ich noch nicht richtig in c++ drin bin, so dass jedes problem wahrscheinlich sehr lehrreich is^^
so hab jetzt den fehler gefunden:er liegt in der umwandlung von string nach int!
direkt vor dem umwandeln wird der aktuell zusammengestellte string in zahls richtig ausgegeben, danach wird durch zahli immer nur die erste zahl ausgegebenwie kann das sein? musste jetzt das erste mal den typ einer variable umwandeln, sodass ich agr keine ahnung habe, was es da noch für möglichkeiten gibt, bzw wann ich welche nehmen soll. kann mir da noch jemand nen passenden tip geben?
thx
-
soll wohl irgendwie mit atoi() gehn, weiß allerdings nicht wie man das einsezt.
habs mitzahli=atoi(zahls)versucht, funktioniert allerings nicht.
wie muss mann das enn dann einseten?
-
ich würde dir von den alten funktionen aus der C-Bibliothek grundsätzlich abraten. Die sind nicht nur fehleranfälliger, sondern unterstützen auch nicht die konzepte der objektorientierten Programmiersprache C++. Du kannst dir zur Typumwandlung vlt mal die Cast-Operatoren aus C++ ansehen. Oder zur Umwandlung von String in einen Zahlentyp die Möglichkeit der Stringstreams.
-
mit cast hats bei mir nicht funktioniert und kann auch nicht funktioneren, da zahlentypen ganz anders aufgebaut sind als strings - so in etwa stands zumindest im inet.
mit den streamstrings hab ich ja am anfang probiert (s. erstes posting), jedoch bekam ich da ja immer den anfangswert raus, was ja auch nicht so ganz das wahre ist^^
das muss doch irgendwie gehn, ich kann mir echt nicht vorstellen, dass noch niemand hier ähnliches nicht machen musste.Mr. Pink
-
Den Anfangswert bekommst deswegen immer heraus, weil in deinem stringstream die erste Zahl noch drin ist. Du musst ihn mit sstr.str(""); erstmal leer machen.
-
hmm, geht leider auch damit nicht, egal an welcher stelle ich sstr.str(""); schreibe, wird sstr anscheinend ie gelöscht, bzw. dessen inhalt.
wieso muss der überhaupt geleert werden? muss man einer stringvariable doch auch nicht machen...
schade
-
Ein Stream ist auch etwas anderes als ein String - und jede neue Eingabe wird ans Ende des bestehenden Puffers angehängt. "sstr.str("");" löscht den Puffer des Streams wieder, deshalb mußt du es einsetzen, BEVOR du etwas neues in den Stream schreiben willst - irgendwo zwischen dem if() und dem sstr<<zahls (wo genau hast du denn versucht?).
PS: setz doch mal direkt vor das "zahls="";" den Befehl "cout<<sstr.str()<<endl;" und sag mir, was dein Programm ausgibt.
-
okay, die if-anweisung sieht jatzt so aus:
if (txt[i]==','||txt[i]=='\0') { j=letztes+1; sstr.str(""); do { zahls+=txt[j]; j++; } while (j<i); letztes=i; sstr<<zahls; sstr>>zahli; cout<<sstr.str()<<endl; zahls=""; zahlen[index]=zahli; cout<<zahli<<endl; index++; }hier ein konsolenauszug:
2,543,75,977,972 //von mir eingegeben 2 //ausgabe 2 //ausgabe //ausgabe 2 //ausgabe //ausgabe 2 //ausgabe //ausgabe 2 //ausgabe //ausgabe 2 //ausgabewas auch immer das jetzt zu bedeuten hat....

-
Das sieht mir stark nach einem Fehler im String-Stream aus, der die Ein/Ausgabe-Operatoren deaktiviert hat.
*grübelt*
Versuch's mal so:if (txt[i]==','||txt[i]=='\0') { j=letztes+1; do { zahls+=txt[j]; j++; }while (j<i); letztes=i; sstr.str(zahls); //Falls es immer noch Probleme gibt, die folgende Zeile aktivieren: //sstr.clear(); sstr>>zahli; cout<<"Stream:"<<sstr.str()<<endl; zahls=""; zahlen[index]=zahli; cout<<"Zahl: "<<zahli<<endl; index++; }
-
jau, so hauts hin - mit "sstr.clear();", sonst wird zahli nie was neues zugewiesen, aber mit gehts problemlos!
vielen danke für die bemühungen