C-Zahl-Ratespiel mit isdigit () -Überprüfung

Ich arbeite an einem Herausforderungsproblem aus meinem Lehrbuch, bei dem ich eine Zufallszahl zwischen 1 und 10 generieren, den Benutzer raten lassen und seine Antwort mit isdigit () validieren soll. Ich habe das Programm (meistens) dazu gebracht, mit dem folgenden Code zu arbeiten.

Das Hauptproblem, auf das ich gestoßen bin, ist, dass bei Verwendung von isdigit () die Eingabe als Zeichen gespeichert werden musste, das ich dann vor dem Vergleich konvertieren musste, damit die tatsächliche Nummer verglichen wurde und nicht der ASCII-Code für die Nummer.

Meine Frage ist also, wie kann ich den Code ändern, damit der Benutzer 10 erraten kann, wenn dies die generierte Zahl ist, da diese Konvertierung nur für die Zahlen 0 bis 9 funktioniert? Oder was wäre, wenn das Spiel einen Bereich von 1-100 haben sollte - wie würde ich das dann erreichen? Kann ich die Eingabe nicht mit isdigit () überprüfen, wenn ich einen möglichen Bereich größer als 0-9 verwende? Was ist ein besserer Weg, um Benutzereingaben zu überprüfen?

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>

int main(void) {

  char buffer[10];
  char cGuess;
  char iNum;
  srand(time(NULL));

  iNum = (rand() % 10) + 1;

  printf("%d\n", iNum);
  printf("Please enter your guess: ");
  fgets(buffer, sizeof(buffer), stdin);
  sscanf(buffer, "%c", &cGuess);

  if (isdigit(cGuess)) 
  {
    cGuess = cGuess - '0';

    if (cGuess == iNum)
      printf("You guessed correctly!");
    else
    {
      if (cGuess > 0 && cGuess < 11)
        printf("You guessed wrong.");
      else
        printf("You did not enter a valid number.");
    }
  }
  else
    printf("You did not enter a correct number.");




return(0);
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage