C# Was habe ich falsch gemacht?

wunschname0302  30.05.2023, 10:13

Wie sieht der Code formatiert als Codeblock hier aus?

DANIELdjldqwj 
Fragesteller
 30.05.2023, 10:13

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: Bild zum Beitrag

VG

 - (Programmiersprache, C Sharp, Visual Studio)
Palladin007  30.05.2023, 10:37

Die Taste, die Du zeigst, ist die Zitat-Taste, nicht die für Code. Das wäre ein "</>"-Zeichen.

2
Palladin007  30.05.2023, 10:44
@Dultus, UserMod Light

Und Du nutzt den DarkReader, kann das sein? Gutefrage.net ist eigentlich hell :D Aber kann ich absolut nachvollziehen, mach ich auch.

0
Palladin007  30.05.2023, 11:07
@Dultus, UserMod Light

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.

0
Dultus, UserMod Light   30.05.2023, 11:09
@Palladin007

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

0
Palladin007  30.05.2023, 11:12
@Dultus, UserMod Light

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

0

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.

Dultus, UserMod Light   30.05.2023, 10:17
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!

1
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".

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler
DANIELdjldqwj 
Fragesteller
 30.05.2023, 10:32

Das offentsichlich hättest du dir auch sparen könne, trotzdem danke

0
Palladin007  30.05.2023, 10:35
@DANIELdjldqwj

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.

0
DANIELdjldqwj 
Fragesteller
 30.05.2023, 10:36
@Palladin007

Wenn du es nicht böse gemeint hättest, hättest du es nicht kommentiert und die Punkte sowieso weggelassen.

0
DANIELdjldqwj 
Fragesteller
 30.05.2023, 10:37
@Palladin007

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.

0
Dultus, UserMod Light   30.05.2023, 10:40
@DANIELdjldqwj

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.

0
Palladin007  30.05.2023, 10:40
@DANIELdjldqwj

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.

0

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