Hilfe bei Schiffeversenken



  • Hallo,
    Wir sollen für die Schule ein Schiffeversenken programmieren. Das Programm ist auch fertig und funktioniert auch, allerdings habe ich auch noch 2 Problem.

    1. Ich muss 2 dimensionale Arrays in eine externe Datei einlesen um sie später dann wieder auszulesen.
    2. Wenn ich aus versehen einen Buchstabe eingebe Stürzt mir das Programm ab. Gibt es eine Möglichkeit zu überprüfen ob die Eingabe eine Zahl ist?
      Danke im Voraus


  • @derheinz sagte in Hilfe bei Schiffeversenken:

    1. Ich muss 2 dimensionale Arrays in eine externe Datei einlesen um sie später dann wieder auszulesen.

    Ja. Und?

    @derheinz sagte in Hilfe bei Schiffeversenken:

    1. Wenn ich aus versehen einen Buchstabe eingebe Stürzt mir das Programm ab. Gibt es eine Möglichkeit zu überprüfen ob die Eingabe eine Zahl ist?
    #include <iostream>
    #include <limits>
    
    int main()
    {
    	int value;
    	while(!(std::cin >> value)) {
    		std::cerr << "Input Error!\n\n";
    		std::cin.clear();
    		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    	}
    
    	std::cout << value << '\n';
    }
    


  • @derheinz sagte in Hilfe bei Schiffeversenken:

    1. Ich muss 2 dimensionale Arrays in eine externe Datei einlesen um sie später dann wieder auszulesen.

    du schreibst zuerst die anzahl der zeilen und spalten und dann alle daten hintereinander in die datei. bein einlesen machst dus entsprechend umgekehrt.


  • Mod

    @derheinz sagte in Hilfe bei Schiffeversenken:

    1. Ich muss 2 dimensionale Arrays in eine externe Datei einlesen um sie später dann wieder auszulesen.

    Eine altebewährte Methode ist, Daten dieser Art zeilen- und spaltenweise jeweils mit einem Trennzeichen dazwischen zu schreiben. Z.B. so mit Kommas als Trennzeichen:

    Wert 0 0, Wert 0 1, Wert 0 2
    Wert 1 0, Wert 1 1, Wert 1 2
    usw.
    
    1. Wenn ich aus versehen einen Buchstabe eingebe Stürzt mir das Programm ab. Gibt es eine Möglichkeit zu überprüfen ob die Eingabe eine Zahl ist?

    Da gilt es zu klären, warum dein Programm abstürzt und diesen Grund abzustellen. Vermutlich wirst du versuchen direkt eine Zahl aus dem Eingabestream zu lesen. Kommt etwas anderes als eine Zahl geht der Stream in einen Fehlerzustand und akzeptiert keine weiteren Aktionen, bevor man sich nicht um das Problem gekümmert hat. Die üblichen Strategien dagegen wäre:

    1. Den Fehlerzustand des Streams aufheben (clear)
    2. Die Fehlerursache beheben, z.B. indem man ungültige Eingaben verwirft (ignore).


  • Danke für die Antworten. Den 2. Punkt habe ich jetzt. Allerdings versteh ich das mit dem 2 dimensionalen Array noch nicht, wie sind die befehle für das Ein und Ausgeben
    ?



  • @swordfish sagte in Hilfe bei Schiffeversenken:

    #include <iostream>
    #include <limits>
    
    int main()
    {
    	int value;
    	while(!(std::cin >> value)) {
    		std::cerr << "Input Error!\n\n";
    		std::cin.clear();
    		std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    	}
    
    	std::cout << value << '\n';
    }
    

    könntest du mir bitte erklären was die std::cin.ignore(... Zeile macht? danke



  • @seppj sagte in Hilfe bei Schiffeversenken:

    Die Fehlerursache beheben, z.B. indem man ungültige Eingaben verwirft (ignore).


Log in to reply