0 Daumen
191 Aufrufe

Frage: Ich lerne gerade Arrays. Wie kann ich das Alter der Spieler im Array abspeichern und anschließend die vom User gegebenen Werte vergleichen und die kleinste Zahl erhalten? Der jüngste Spieler solle anfangen.


Code:


#include <stdio.h>
#define MAX_SPIELER 3
#define LENGTH 20
#define Alter_Platzspeicherung 99

int main(void) {
  unsigned Anzahl_an_Spieler;
  char Name[LENGTH];
  unsigned Alter [Alter_Platzspeicherung];

  do {
      printf("Anzahl an Spieler (1-3): ");
      scanf("%u", &Anzahl_an_Spieler);

      if (Anzahl_an_Spieler < 1 || Anzahl_an_Spieler > MAX_SPIELER) {
          printf("Error: Ungültige Anzahl an Spielern!\n");
      } else {
         
          unsigned alter[Anzahl_an_Spieler];
          for (unsigned Spieler = 1; Spieler <= Anzahl_an_Spieler; Spieler++) {
              printf("Name und Alter für Spieler %u: ", Spieler);
              scanf("%s %u", Name, alter[Spieler-1]);
              // scanf("%s %u", Name, &Alter);

              if (strlen(Name) > LENGTH) {
                  printf("ERROR: Maximale Zeichenlänge von 20 überschritten.\n");
                  Spieler--;
              }
          }
      }
  } while (Anzahl_an_Spieler < 1 || Anzahl_an_Spieler > MAX_SPIELER);

  if (Anzahl_an_Spieler == 0){

      printf("Monty Und Cebra spielen. Augenzahl 1 oder 2 fängt Monty an, sonsonsten Cebra");
  }else{
     
      switch (Anzahl_an_Spieler)
      {
      case 2:
          if(2)

         
          break;
     
      default:


          break;
      }
      printf("Der Jüngste beginnt:%s", Name);

  }

 


  return 0;
}

Avatar von
Wie kann ich das Alter der Spieler im Array abspeichern

In welchem Array willst du das Alter der Spieler abspeichern?

1 Antwort

0 Daumen
 
Beste Antwort
die vom User gegebenen Werte vergleichen und die kleinste Zahl erhalten?
struct min_result {
    int key;
    unsigned value;
};

/**
* Find the minimum value in an array
*
* @param haystack The array to search.
* @param length The number of elements in the array.
* @return The minimum value in the array
* @pre haystack != NULL
* @pre length > 0
*/
struct min_result min(unsigned haystack[], int length) {
    struct min_result result;
    result.key = 0;
    result.value = haystack[0];
    for (int i = 1; i < length; ++i) {
        if (haystack[i] < result.value) {
            result.key = i;
          result.value = haystack[i];
        }
    }
    return result;
}
if (strlen(Name) > LENGTH) {

Zu diesem Zeitpunkt wurden im Array Name potentiell schon mehr als LENGTH Zeichen abgelegt und somit eine Schutzverletzung begangen. Verwende stattdessen %19s um maximal 19 Zeichen einzulesen (ein Platz im Array muss frei bleiben für die abschließende \0).

Besser noch, teile die Eingabe in zwei Schritte auf, eine für den Namen und eine für das Alter. Die conversion specification s ließt nämlich maximal bis zum nächsten Leerzeichen. Wenn du die Eingabe aufteilst, dann kannst du mittels %19[^\n] bis zum Zeilenende lesen und damit auch Namen wie "von Zimmerschneit" verarbeiten.

Avatar von 5,6 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community