kostenloser Webspace werbefrei: lima-city


while schlife läuft einmal zu viel durch

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    splinto

    Kostenloser Webspace von splinto, auf Homepage erstellen warten

    splinto hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    Probier es mal mit einer do...while Schleife, statt der while Schleife.
  4. m*******y

    Rein von der Logik her sollte die do-while ja eigentlich genau das bewirken, was in genanntem Problem passiert ... komisch komisch.
  5. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    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++;
        }
      }
  6. Autor dieses Themas

    splinto

    Kostenloser Webspace von splinto, auf Homepage erstellen warten

    splinto hat kostenlosen Webspace.

    vielen vielen dank götter des C++, ihr seid die besten.
    es funktioniert einwandfrei.

    so, jetz geh ich mir einen lolli kaufen :biggrin:

    mfg splinto
  7. 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];
      }

  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!