Was stimmt an dem Code nicht in C?

1 Antwort

Es gibt einige Fehler im Code:

  1. In der ersten Zeile der Funktion main fehlt ein Semikolon nach der Variablendeklaration von Antwort0.
  2. In den scanf()-Funktionen wird jeweils die Adresse der Variable als zweites Argument erwartet, aber die Adresse wird mit dem Operator "&" von der Variable genommen. Das Problem hier ist, dass die Variablenantwort1, antwort2, antwort3 und antwort4 vom Typ char sind, aber die scanf()-Funktion mit dem Format "%d" ein Integer erwartet. Hier sollte das Format "%c" verwendet werden, um einen Charakter zu lesen.
  3. In den while()-Schleifen wird der Zuweisungsoperator "=" anstelle des Vergleichsoperators "==" verwendet. Dies bedeutet, dass die Schleifen immer ausgeführt werden, da der Ausdruck als wahr ausgewertet wird, wenn eine Variable mit einem Wert ungleich null zugewiesen wird. In diesem Fall sollte der Vergleichsoperator "==" verwendet werden.
  4. In den printf()-Funktionen wird das Format "[%c/n]" verwendet, aber nur ein einzelner Charakter wird gelesen. Das Format sollte "[%c]" lauten.

Hier ist eine korrigierte Version des Codes:

#include <stdio.h>

int main()

{

  char Antwort0;

  printf("Willkommen zu meinem Roboter, wollen Sie ihn starten? [y/n]: ");

  scanf("%c", &Antwort0);

  while (Antwort0 == 'y')

  {

    char antwort1;

    printf("Ist die Wand schon da? [y/n]: ");

    scanf(" %c", &antwort1);

    while (antwort1 == 'y')

    {

      printf("Roboter dreht sich nach links [y/n]: ");

      scanf(" %c", &antwort1);

    }

    char antwort2;

    printf("Ist die Wand schon da? [y/n]: ");

    scanf(" %c", &antwort2);

    while (antwort2 == 'y')

    {

      printf("Roboter dreht sich nach links [y/n]: ");

      scanf(" %c", &antwort2);

    }

    char antwort3;

    printf("Ist die Wand schon da? [y/n]: ");

    scanf(" %c", &antwort3);

    while (antwort3 == 'y')

    {

      printf("Roboter dreht sich nach links [y/n]: ");

      scanf(" %c", &antwort3);

    }

    char antwort4;

    printf("Ist die Wand schon da? [y/n]: ");

    scanf(" %c", &antwort4);

    while (antwort4 == 'y')

    {

      printf("Roboter dreht sich nach links und ist wieder an seinem Platz\n");

      antwort4 = 'n';

    }

    printf("Wollen Sie den Roboter nochmal starten? [y/n]: ");

    scanf(" %c", &Antwort0);

  }

  printf("Vielen Dank, dass Sie meinen Roboter ausprobiert haben!\n");

  return 0;

}


DANIELdjldqwj 
Fragesteller
 04.05.2023, 06:37

Danke, habe jedoch eine Sache vergessen, wenn die antwort n ist, soll er einen Schritt machen, wie baue ich das ein?

0
Allezkino  04.05.2023, 06:40
@DANIELdjldqwj

Um einen Schritt auszuführen, wenn die Antwort 'n' lautet, können Sie ein einfaches if-else-Statement verwenden. Hier ist eine modifizierte Version Ihres Codes, die dies enthält:

#include <stdio.h>

int main()

{

 char Antwort0;

 printf("Willkommen zu meinem Roboter, wollen Sie ihn starten? [y/n]: ");

 scanf(" %c", &Antwort0);

 while (Antwort0 == 'y')

 {

  char antwort1;

  printf("Ist die Wand schon da? [y/n]: ");

  scanf(" %c", &antwort1);

  while (antwort1 == 'y')

  {

   printf("Roboter dreht sich nach links [y/n]: ");

   scanf(" %c", &antwort1);

  }

  char antwort2;

  printf("Ist die Wand schon da? [y/n]: ");

  scanf(" %c", &antwort2);

  while (antwort2 == 'y')

  {

   printf("Roboter dreht sich nach links [y/n]: ");

   scanf(" %c", &antwort2);

  }

  char antwort3;

  printf("Ist die Wand schon da? [y/n]: ");

  scanf(" %c", &antwort3);

  while (antwort3 == 'y')

  {

   printf("Roboter dreht sich nach links [y/n]: ");

   scanf(" %c", &antwort3);

  }

  char antwort4;

  printf("Ist die Wand schon da? [y/n]: ");

  scanf(" %c", &antwort4);

  if (antwort4 == 'n') {

   printf("Roboter macht einen Schritt nach vorne\n");

  }

  while (antwort4 == 'y')

  {

   printf("Roboter dreht sich nach links und ist wieder an seinem Platz\n");

   antwort4 = 'n';

  }

  printf("Wollen Sie den Roboter nochmal starten? [y/n]: ");

  scanf(" %c", &Antwort0);

 }

 printf("Vielen Dank, dass Sie meinen Roboter ausprobiert haben!\n");

 return 0;

}

Wenn die Antwort auf die Frage nach der Wand 'n' ist, wird die Meldung "Roboter macht einen Schritt nach vorne" ausgegeben. Wenn die Antwort 'y' lautet, wird der Roboter nach links gedreht, bis die Antwort 'n' lautet. Wenn die Antwort auf die letzte Frage 'y' ist, wird der Roboter nach links gedreht und kehrt zu seinem Platz zurück.

0
DANIELdjldqwj 
Fragesteller
 04.05.2023, 06:44
@Allezkino

Als printf soll noch angegeben werden, dass er einen Schritt macht, also wenn antwort n dann  printf("Schritt"); und naja er soll sich halt trotzdem mindestens 4 mal nach links bewegen auch wenn die antwort n ist

0
Allezkino  04.05.2023, 06:53
@DANIELdjldqwj

Hier ist die aktualisierte Version des Codes mit der Anzeige von "Schritt" beim Vorwärtsgehen, auch wenn die Antwort "n" ist, und der Roboter sich trotzdem mindestens 4-mal nach links bewegt:

#include <stdio.h>

int main()

{

  char Antwort0;

  printf("Willkommen zu meinem Roboter, wollen Sie ihn starten? [y/n]: ");

  scanf(" %c", &Antwort0);

  while (Antwort0 == 'y')

  {

    char antwort1;

    printf("Ist die Wand schon da? [y/n]: ");

    scanf(" %c", &antwort1);

    while (antwort1 == 'y')

    {

      printf("Roboter dreht sich nach links [y/n]: ");

      scanf(" %c", &antwort1);

    }

    char antwort2;

    printf("Ist die Wand schon da? [y/n]: ");

    scanf(" %c", &antwort2);

    while (antwort2 == 'y')

    {

      printf("Roboter dreht sich nach links [y/n]: ");

      scanf(" %c", &antwort2);

    }

    char antwort3;

    printf("Ist die Wand schon da? [y/n]: ");

    scanf(" %c", &antwort3);

    while (antwort3 == 'y')

    {

      printf("Roboter dreht sich nach links [y/n]: ");

      scanf(" %c", &antwort3);

    }

    char antwort4;

    printf("Ist die Wand schon da? [y/n]: ");

    scanf(" %c", &antwort4);

    if (antwort4 == 'n')

    {

      printf("Roboter macht einen Schritt nach vorne und dreht sich nach links\n");

    }

    else

    {

      printf("Roboter dreht sich nach links\n");

    }

    int i;

    for (i = 5; i <= 10; i++)

    {

      if (i == 11)

      {

        printf("Roboter ist wieder an seinem Platz\n");

      }

      else

      {

        printf("Ist die Wand schon da? [y/n]: ");

        char antwort;

        scanf(" %c", &antwort);

        if (antwort == 'n')

        {

          printf("Roboter macht einen Schritt nach vorne und dreht sich nach links\n");

        }

        else

        {

          printf("Roboter dreht sich nach links\n");

        }

      }

    }

    printf("Wollen Sie den Roboter nochmal starten? [y/n]: ");

    scanf(" %c", &Antwort0);

  }

  printf("Vielen Dank, dass Sie meinen Roboter ausprobiert haben!\n");

  return 0;

}

In dieser Version wird eine for-Schleife verwendet, um den Roboter mindestens 4-mal nach links zu drehen, auch wenn die Antwort "n" ist. Die printf-Anweisungen wurden entsprechend aktualisiert, um die Anzeige von "Schritt" beim Vorwärtsgehen zu ermöglichen.

0
DANIELdjldqwj 
Fragesteller
 04.05.2023, 12:59
@Allezkino

Also naja irgendwie funktioniert das nicht ganz, also naja, er soll als erstes fragen, ob die Wand ist, wenn nein soll er einen Schritt machen bis man y eingibt, und wenn man y eingibt soll er sich nach links drehen und einen Schritt machen und naja wenn man 4 Mal gesagt hat, dass da eine Wand ist muss er noch einen Schritt machen und er ist jetzt an seinen Platz und das Programm kann beendet werden.

0
Allezkino  04.05.2023, 18:50
@DANIELdjldqwj

Den code hat dir übrigends chat gpt umgeschrieben. Habe bloß deine fragen dort eingefügt xD

0
DANIELdjldqwj 
Fragesteller
 04.05.2023, 19:32
@Allezkino

Ah deswegen hat mir das alles nichts gebracht, cool danke für deine nicht vorhandene Hilfe

1