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.