C# Was habe ich falsch gemacht?
Hier der Code vorab:
using System;
namespace Test_2
{
class Program
{
static void Main(string[] args)
{
string antwort;
bool antwortOk;
do
{
Console.WriteLine("Guten Tag Herr Baumann, wollen sie meinen roboter starten? [Ja|Nein]");
antwort = Console.ReadLine();
antwortOk = antwort.ToLower() == "ja" || antwort.ToLower() == "nein";
if (!antwortOk)
{
Console.WriteLine("Bitte geben Sie Ja oder Nein ein");
}
} while (!antwortOk);
if (antwort.ToLower() == "ja")
{
string antwortRobo1;
bool antwortOkRobo1;
do
{
Console.WriteLine("Ist die Wand da?? [Ja|Nein]");
antwortRobo1 = Console.ReadLine();
antwortOkRobo1 = antwortRobo1.ToLower() == "ja" || antwortRobo1.ToLower() == "nein";
if (!antwortOkRobo1)
{
Console.WriteLine("Bitte geben Sie Ja oder Nein ein");
}
} while (!antwortOkRobo1);
if (antwortRobo1.ToLower() == "Nein")
{
Console.WriteLine("Schritt)");
}
else if (antwortRobo1.ToLower() == "Ja")
{
Console.WriteLine("drehung");
}
}
Console.WriteLine("Bis zum nächsten Mal!");
Console.ReadKey();
}
}
}
Wieso beendet er das Programm, wenn ich bei der zweiten Frage Ja oder nein eingebe?
Wie sieht der Code formatiert als Codeblock hier aus?
Tut mir leid, ich bin Anfänger und verstehe nicht, was du meinst.
4 Antworten
Moin nochmal DANIELdjldqwj,
Da Du den Input mit ToLower kleinschreibst, können die Bedingungen der Ifs nie zutreffen.
In dem zweiten Abschnitt, da Du keine Schleife hast, hat das Programm auch keinen Grund danach weiterzumachen. Das "Bis zum nächsten Mal!" sollte dabei noch ausgegeben werden.
Aber bitte, nochmals: Bitte formatiere Deine Fragen.
Dazu gibt es diese Taste:
VG
Hupsi! Stimmt natürlich! Habe ich korrigiert.
Und Du nutzt den DarkReader, kann das sein? Gutefrage.net ist eigentlich hell :D Aber kann ich absolut nachvollziehen, mach ich auch.
Gutefrage selbst hat doch schon lange ein Dark Theme. :D
Ui - cool - direkt mal umgestellt :D
Kannte ich noch nicht, ich nutze immer den DarkReader, der ist bei den meisten Webseiten erstaunlich zuverlässig, nur selten irgendwelche Darstellungsfehler.
Habe ich vorher auch, aber bei YouTube hatte ich dann meistens einen weißen unteren Rand am Video, wenn nicht maximiert und einige Bilder wurden invertiert.
Ich suche noch ein Plugin, mit dem ich ein Theme auf Websites erzwingen kann. Das wäre cool. :D
Ich hatte vorher den hier: https://nighteye.app/de/
Der hatte aber ein paar Macken und hat im Abo Geld gekostet.
Jetzt der DarkReader: https://darkreader.org/
Kostenlos und kaum Probleme und wenn doch, kann man Render-Modi anpassen, je nachdem, wie es am besten aussieht. Plus noch ein paar andere Details.
Bei YouTube hab ich damit keine Probleme.
Allerdings hat YouTube auch ein DarkTheme? :D
Nutz doch einfach GPT :D
Es scheint, dass das Programm beendet wird, wenn du "Ja" oder "Nein" bei der zweiten Frage eingibst, weil die Bedingung für die Schleife nicht erfüllt wird.
In deinem Code lautet die Bedingung für die Schleife:
csharp
Copy code
} while (!antwortOkRobo1);
Diese Bedingung besagt, dass die Schleife so lange wiederholt werden soll, wie
!antwortOkRobo1
wahr ist, also solange
antwortOkRobo1
falsch ist.
In deinem Fall wird
antwortOkRobo1
auf
false
gesetzt, wenn die eingegebene Antwort weder "Ja" noch "Nein" ist. Sobald du jedoch "Ja" oder "Nein" eingibst, wird
antwortOkRobo1
auf
true
gesetzt, und die Bedingung
!antwortOkRobo1
wird zu
false
, was bedeutet, dass die Schleife beendet wird.
Um das gewünschte Verhalten zu erreichen, musst du die Bedingung umkehren. Ändere die Zeile in:
csharp
Copy code
} while (antwortOkRobo1 == false);
Damit wird die Schleife so lange wiederholt, wie
antwortOkRobo1
falsch ist, also solange die eingegebene Antwort weder "Ja" noch "Nein" ist.
Hier ist der aktualisierte Code:
csharp
Copy code
using System; namespace Test_2 { class Program { static void Main(string[] args) { string antwort; bool antwortOk; do { Console.WriteLine("Guten Tag Herr Baumann, wollen sie meinen Roboter starten? [Ja|Nein]"); antwort = Console.ReadLine(); antwortOk = antwort.ToLower() == "ja" || antwort.ToLower() == "nein"; if (!antwortOk) { Console.WriteLine("Bitte geben Sie Ja oder Nein ein"); } } while (!antwortOk); if (antwort.ToLower() == "ja") { string antwortRobo1; bool antwortOkRobo1; do { Console.WriteLine("Ist die Wand da? [Ja|Nein]"); antwortRobo1 = Console.ReadLine(); antwortOkRobo1 = antwortRobo1.ToLower() == "ja" || antwortRobo1.ToLower() == "nein"; if (!antwortOkRobo1) { Console.WriteLine("Bitte geben Sie Ja oder Nein ein"); } } while (antwortOkRobo1 == false); if (antwortRobo1.ToLower() == "nein") { Console.WriteLine("Schritt"); } else if (antwortRobo1.ToLower() == "ja") { Console.WriteLine("Drehung"); } } Console.WriteLine("Bis zum nächsten Mal!"); Console.ReadKey(); } } }
Mit dieser Änderung sollte das Programm in der zweiten Frage weiterhin wiederholt werden, bis eine gültige Antwort eingegeben wird.
Es scheint, dass das Programm beendet wird, wenn du "Ja" oder "Nein" bei der zweiten Frage eingibst, weil die Bedingung für die Schleife nicht erfüllt wird.
Die Antwort von ChatGPT ist inkorrekt und aus dem Grund sollte man der KI in Sachen Programmierung nicht zu sehr vertrauen.
Der Auslöser ist hier nicht, dass eine Bedingung für eine Schleife nicht getroffen wird, sondern weil es keine Schleife gibt, die das auffangen kann!
Tut mir leid, ich bin Anfänger und verstehe nicht, was du meinst.
Offensichtlich ...
Gemeint ist die Formatierung hier auf gutefrage.net und was "formatiert" heißt, kann man googeln.
using System;
namespace Test_2
{
class Program
{
static void Main(string[] args)
{
string antwort;
bool antwortOk;
do
{
Console.WriteLine("Guten Tag Herr Baumann, wollen sie meinen roboter starten? [Ja|Nein]");
antwort = Console.ReadLine();
antwortOk = antwort.ToLower() == "ja" || antwort.ToLower() == "nein";
if (!antwortOk)
{
Console.WriteLine("Bitte geben Sie Ja oder Nein ein");
}
} while (!antwortOk);
if (antwort.ToLower() == "ja")
{
string antwortRobo1;
bool antwortOkRobo1;
do
{
Console.WriteLine("Ist die Wand da?? [Ja|Nein]");
antwortRobo1 = Console.ReadLine();
antwortOkRobo1 = antwortRobo1.ToLower() == "ja" || antwortRobo1.ToLower() == "nein";
if (!antwortOkRobo1)
{
Console.WriteLine("Bitte geben Sie Ja oder Nein ein");
}
} while (!antwortOkRobo1);
if (antwortRobo1.ToLower() == "Nein")
{
Console.WriteLine("Schritt)");
}
else if (antwortRobo1.ToLower() == "Ja")
{
Console.WriteLine("drehung");
}
}
Console.WriteLine("Bis zum nächsten Mal!");
Console.ReadKey();
}
}
}
Die Probleme:
if (antwortRobo1.ToLower() == "Nein")
// ...
else if (antwortRobo1.ToLower() == "Ja")
// ...
Du gibst "Ja" ein, rufst "ToLower" auf, hast danach "ja" - ist das gleich "Ja"?
Nein, Groß- und Kleinschreibung muss beachtet werden.
Das "ToLower" (oder "ToUpper") ist richtig, aber dann musst Du auch mit "ja" (bzw. "JA") vergleichen.
Gleiches natürlich auch für "Nein".
Das offentsichlich hättest du dir auch sparen könne, trotzdem danke
Ja, vielleicht, ist aber eine Tatsache ^^
Ist nicht mal böse gemeint, mit etwas mehr Erfahrung sieht man sofort, wer Anfänger ist und wer nicht. Das gehört dazu, wird dir irgendwann auch so gehen.
Und wer das nicht sofort sieht, dessen antwort solltest Du dann auch in Frage stellen, die Person kann dann auch noch nicht so weit sein.
Wenn du es nicht böse gemeint hättest, hättest du es nicht kommentiert und die Punkte sowieso weggelassen.
Und wenn du dir den Code anguckst, weißt du doch, dass ich gerade angefangen habe. Mein Gott heutzutage kann man nichts neues mehr anfangen, weil man nur noch bestätigt wird, das man momentan einfach scheiße ist.
Du hättest bei der letzten Antwort, bei der ich dir das andere Problem erklärt, habe auch gerne fragen können, wie man formatiert. ;-)
Es ist einfach sehr unangenehm zu lesen, weil man wirklich die einzelnen Klammern schon zählen muss, um die Blöcke korrekt zuordnen zu können.
Ich habe nicht geschrieben, dass Du scheiße bist, sondern nur, dass Du Anfänger bist.
Ich hab auch mal angefangen und hab genau den gleichen Code (naja, anderes Projekt) wie Du geschrieben.
"Anfänger" ist nichts schlechtes, jeder fängt mal an. Schlecht wäre eher, wenn Du dich darauf ausruhst und dir von Anderen alles fertig machen lässt.
weil du antwortRobo1.ToLower() aufrufst und dann aber prüfst ob es "Nein" bzw "Ja" ist
wenn du ToLower() aufrufst wird es aber eher "nein" bzw "ja" sein
Die Taste, die Du zeigst, ist die Zitat-Taste, nicht die für Code. Das wäre ein "</>"-Zeichen.