Falsches Format



  • Hallo
    ich brauche eure Hilfe
    Wenn ich das Programm starte und Beispielsweise b eingebe zum eingeben der Daten für die erste Kiste öffnet sich der Debugger und wenn ich ihn durchlaufen lasse kommt die Meldung
    Die Eingabeformatzeichenfolge hat das falsche Format. Warum und wo muss ich was ändern

    [code]
    
    // Die Struktur wird global vereinbart
    struct kiste {
    	Int32 kistenNummer;
    	Int32 hoehe;
    	Int32 breite;
    	Int32 laenge;
    	Int32 volumen;
    };
    //Die Funktion einlesen der Kisten
    kiste einlesen(Int32 kistenNummer) {
    
    	// Eine lokale Strukturvariable
    	kiste aKiste;
    
    	//Kisten Masse einlesen
    	Console::Write("\nGeben Sie die Höhe der {0}. Kiste ein. = ",kistenNummer);
    	aKiste.hoehe=Convert::ToInt32(Console::ReadLine());
    	Console::Write("\nGeben Sie die breite {0}. Kiste ein. = ",kistenNummer);
    	aKiste.breite=Convert::ToInt32(Console::ReadLine());
    	Console::Write("\nGeben Sie die Länge der {0}. Kiste ein. = ",kistenNummer);
    	aKiste.laenge=Convert::ToInt32(Console::ReadLine());
    
    	// eine Leerzeile ausgeben
    	Console::WriteLine();
    	return aKiste;
    }
    
    int main(array<System::String ^> ^args)
    {
    	Char funktionAuswahl;
    	Console::WriteLine(" Auswahl der Funktionen:");
    	Console::WriteLine(" a Kistennummer");
    	Console::WriteLine(" b Eingabe Daten für Kiste");
    	Console::WriteLine(" c Löschen");
    	Console::WriteLine(" d Ändern");
    	Console::WriteLine(" e Anzeigen");
    	Console::WriteLine(" f Auflisten");
    	Console::WriteLine(" g Volumen");
    
    	Console::WriteLine("Bitte wählen Sie aus");
    	funktionAuswahl=Console::Read();
    
    	// Die Auswahl der einzelnen Funktionen
    	switch (funktionAuswahl) {
    case 'a':
    	break;
    case 'b':
    	break;
    case 'c':
    	break;
    case 'd':
    	break;
    case 'e':
    	break;
    case 'f':
    	break;
    case 'g':
    	break;
    default:
    	Console::WriteLine("Sie haben ein falsches Zeichen eingegeben");
    	}
    /*###############################################################################*/
    	{
    		kiste kleineKiste[3];
    		// Das einlesen der Daten für die Funktion
    		for (Int32 schleife=0; schleife<3; schleife++)
    			kleineKiste[schleife]=einlesen(schleife+1);
    		Console::ReadLine();
    
    	}
    
        return 0;
    }
    


  • Meines Wissens liefert

    Console::Read()
    

    einen String. Du versuchst dann diesen String einer Char-Variable zu zuweisen

    funktionAuswahl=Console::Read()
    

    Definiert doch mal deine Funktionsauswahl in String um und probiers noch mal.



  • Hallo Heinerich,

    irgendwie drehst Du Dich im Kreis.
    Der Fehler in der for Schleife ausgelöst.
    Zeile 68.

    kleineKiste[schleife]=einlesen(schleife+1);
    

    Entschuldige bitte die Frage, aber was versuchst Du mit dieser Zeile zu erreichen?
    Lass uns das jetzt mal in diesem posting klären, da ist nämlich nochmal der gleiche Code von Dir, halt nur ein wenig weiter unten ( Laufzeit-Fehler ).

    Gruß, Doug_HH



  • Due Zeile nimmt das Ergebnis von einlesen(int) entgegen und weist dies kleineKiste[int] zu.

    Die Schleife geht von 0 bis 2. Damit der Anwender nicht die Daten von Kiste 0 eingeben muss, wird schleife+1 übergeben.

    Zum eigentlichen Problem:

    Mittels Read liest Du 1 Zeichen (int) von der Konsole. Du musst aber b und ENTER eingeben.

    Ein

    aKiste.hoehe=Convert::ToInt32(Console::ReadLine());

    versucht somit ein "ENTER" in ein Integer zu wandeln und löst damit eine Exception aus.

    Du kannst noch ein ReadLine dazwischen anfügen, das alles bis zum anliegenden Enter liest oder einfach gleich mittels ReadLine einen String erwarten und Dein Zeichen daraus Extrahieren.

    Console::ReadLine();
    		kiste kleineKiste[3];
    

    oder

    System::String ^ funktionAuswahl;
    	Console::WriteLine(" Auswahl der Funktionen:");
    
    	Console::WriteLine("Bitte wählen Sie aus");
    	funktionAuswahl=Console::ReadLine();
    
    	if(System::String::IsNullOrEmpty(funktionAuswahl))
    		return 20;
    
    	// Die Auswahl der einzelnen Funktionen
    	switch (funktionAuswahl[0]) {
    case 'a':
    

    Ansonsten musst Du bei dem Einlesen der Kiste einfach darauf vorbereitet sein, das die EIngabe nicht gewandelt werden kann. Schau Dir hierzu mal System::Int32::TryParse an.


Anmelden zum Antworten