while schlife läuft einmal zu viel durch
lima-city → Forum → Programmiersprachen → C/C++ und D
array
auslese
code
datei
ende
erstes zeichen
finger
folgende schleife
genanntem problem
index
konsole
letzte zeichen
logik
nervige verdoppelte letzte zeichen
produkt
schleife
string
url
weiteren zeichen
zeichen
-
servus,
ich habe das problem, dass wenn ich zeichen aus einer normalen ASCII-Datei auslesen will, das letzte zeichen verdoppelt wird.
also folgende schleife:
... while(!dataInput.eof()) //es wird überprüft ob das ende der datei erreicht ist. ist dies der fall wird die schleife verlassen { dataInput.get(getChar); //getChar ist eine charvariable strings[index] = getChar; //bei jedem schleifendurchlauf wird hier das gerade ausgelesene zeichen auf die aktuelle speicherstelle der arrays strings[] gespeichert cout << strings[index]; //ich gebe das gerade ausgelesene zeichen, das ins array gespeichert wurde in der konsole aus index++; //die indexvariable wird um eins erhöt, weil ich ja beim nächsten schleifendurchlauf das nächste zeichen in die nächste speicherstelle des arrays speichern will } ...
es stellt sich bei euch die frage, warum ich das ganze in ein array speichere? ich möchte damit weiterarbeiten, da ist aber immer dieses nervige verdoppelte letzte zeichen, das offensichtlich ein produkt der schleife ist.
also läuft offenbar die schleife beim ende der datei nocheinmal durch und speichert das letzte zeichen in das array.
aber warum? normal müsste da doch dann schluss sein - oder nicht?
kann mir da jemand weiterhelfen?
mfg splinto -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Probier es mal mit einer do...while Schleife, statt der while Schleife.
-
Rein von der Logik her sollte die do-while ja eigentlich genau das bewirken, was in genanntem Problem passiert ... komisch komisch.
-
my-family schrieb:
Rein von der Logik her sollte die do-while ja eigentlich genau das bewirken, was in genanntem Problem passiert ... komisch komisch.
Stimmt, da waren die Finger wieder schneller als das Hirn. Auf http://www.cplusplus.com/reference/iostream/istream/get/
wurde es so gelöst:
while(!dataInput.eof()) { dataInput.get(getChar); if(!dataInput.eof()) { strings[index] = getChar; cout << strings[index]; index++; } }
-
vielen vielen dank götter des C++, ihr seid die besten.
es funktioniert einwandfrei.
so, jetz geh ich mir einen lolli kaufen
mfg splinto -
Oder so:
dataInput.get(getChar); // Erstes Zeichen lesen while(!dataInput.eof()) { strings[index] = getChar; cout << strings[index]; index++; dataInput.get(getChar); // Alle weiteren Zeichen lesen }
schöner noch geht es mit einer for Schleife:
for(dataInput.get(getChar) ; !dataInput.eof() ; index++ , dataInput.get(getChar)) { strings[index] = getChar; cout << strings[index]; }
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage