MFC erzeugt nicht vorhandenen "0000"-String beim Listbox befüllen



  • Dies ist der MFC-Teil in OnInitDialog. Die Daten werden mit getline aus einer teilweise text-Datei (unterschiedlich delimited) ausgelesen und anschließend das vierstellige Jahr ausgegeben. MFC erzeugt beim füllen der Listbox für das Jahr 5 Einträge, und vier sollten es sein. Eine undefinierte Stringfolge ("0000") wird erzeugt. Die Textdatei enthält kein Jahr mit "0000"

    Hier der Codeausschnitt aus der OnInitDialog:

    [code]BOOL CRechnungenWinDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
    	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
    	SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden
    	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden
    
    	// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    	char Zeile [500+1];
    	ifstream datei;
    	datei.open ("Rechnungen.txt", ios::nocreate | ios::in);
    	if (datei.fail())
    			AfxMessageBox("Fehler beim öffnen der Datei!");
    	else
    	{
    		while (! datei.eof())
    		{
    			datei.getline(Zeile, 500, ';'); // Rechnungsnummer auslesen
    			Ausgangsrechnungen.RechNr = atoi(Zeile);
    
    			datei.getline(Zeile, 500, '-'); // Jahr von Datum auslesen
    			Ausgangsrechnungen.RechDatum.SetJahr(atoi(Zeile));
    
    			datei.getline(Zeile, 500, '-'); // Monat von Datum auslesen
    			Ausgangsrechnungen.RechDatum.SetMonat(atoi(Zeile));
    
    			datei.getline(Zeile, 500, ';'); // Tag von Datum einlesen
    			Ausgangsrechnungen.RechDatum.SetTag(atoi(Zeile));
    
    			datei.getline(Zeile, 500, ';'); // Kunde auslesen
    			Ausgangsrechnungen.Kunde = Zeile;
    
    			datei.getline(Zeile, 500, '\n'); // Rechnungsbetrag auslesen
    			Ausgangsrechnungen.Rechbetrag = atof(Zeile);
    
    			char str_jahr [4+1];
    			Ausgangsrechnungen.RechDatum.FormatDatum("%Y", str_jahr);
    			if (m_Jahr.FindString(-1, str_jahr) == LB_ERR)
    				m_Jahr.AddString(str_jahr);
    		}
    
    	}
    
    	datei.close();
    
    	return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
    }[/code]
    


  • Das liegt daran, dass deine Schleife falsch aufgebaut ist. eof liefert erst dann true, wenn getline schon einmal fehlgeschlagen ist.


Anmelden zum Antworten