C, Eingabeüberprüfung

Aircrackpvt

Newbie
Registriert
Juli 2020
Beiträge
2
Hey Leute,
ich bin recht neu am Programmieren mit C und habe so meine Probleme mit der Eingabeüberprüfung.
Folgendes Problem, der unten angefügte Code soll die Eingabe eines Benutzers auf die Kriterien überprüfen:
  • Eingabe von zwei Zahlen mit Komma getrennt
  • Keine Buchstaben in der Eingabe
  • X soll nicht kleiner 1 sein -> und genau daran scheitert er. Warum?
Mir ist klar, dass es mit Sicherheit andere+elegantere Methoden gibt, doch warum funktioniert diese nicht?

//Code:

int eingabeüberprüfung () {
int ret, x, y;
char c;

printf ("Koordinateneingabe: x,y\n");
ret = scanf("%d,%d%c", &x, &y, &c);
while ((ret != 3 || c != '\n' || x < 1) {
while ((c = getchar()) != '\n' && c != EOF) {};
printf ("Bitte eine richtige Eingabe im Format x,y machen!");
ret = scanf("%d,%d%c", &x, &y, &c);
}
printf ("%d", ret);
printf ("Richtige Eingabe");
return 1;
}
Ergänzung ()

Gerade gemerkt, dass da eine runde Klammer an die falsche Stelle gerutscht ist, daran liegts aber nicht :)
 
Zuletzt bearbeitet:
Ich würde mir den Code vielleicht sogar angucken, wenn du die Codetags nutzen würdest, sodass man das Konstrukt anständig lesen kann.
Aber so?
 
  • Gefällt mir
Reaktionen: BAGZZlash, ReVan1199 und BeBur
Code:
int eingabeüberprüfung () {
int ret, x, y;
char c;

printf ("Koordinateneingabe: x,y\n");
ret = scanf("%d,%d%c", &x, &y, &c);
while ((ret != 3 || c != '\n' || x < 1) {
while ((c = getchar()) != '\n' && c != EOF) {};
printf ("Bitte eine richtige Eingabe im Format x,y machen!");
ret = scanf("%d,%d%c", &x, &y, &c);
}
printf ("%d", ret);
printf ("Richtige Eingabe");
return 1;
}
 
@t4ub3
Bevor der Neuling es von dir falsch lernt:

C:
int eingabeüberprüfung () {
  int ret, x, y;
  char c;

  printf ("Koordinateneingabe: x,y\n");
  ret = scanf("%d,%d%c", &x, &y, &c);
  while ((ret != 3 || c != '\n' || x < 1) {
    while ((c = getchar()) != '\n' && c != EOF) {};
    printf ("Bitte eine richtige Eingabe im Format x,y machen!");
    ret = scanf("%d,%d%c", &x, &y, &c);
  }
  printf ("%d", ret);
  printf ("Richtige Eingabe");
  return 1;
}
Ergänzung ()

In der Zeile:
C:
  while ((ret != 3 || c != '\n' || x < 1) {
Ist schon mal die Klammerung falsch, das lässt sich also gar nicht kompilieren.
 
  • Gefällt mir
Reaktionen: BAGZZlash
pseudopseudonym schrieb:
Ich würde mir den Code vielleicht sogar angucken, wenn du die Codetags nutzen würdest, sodass man das Konstrukt anständig lesen kann.
Aber so?

Das wusste ich nicht, bin zum ersten Mal hier unterwegs. Ich achte in Zukunft drauf, ich bitte vielmals um Entschuldigung.
Ergänzung ()

Aircrackpvt schrieb:
Das wusste ich nicht, bin zum ersten Mal hier unterwegs. Ich achte in Zukunft drauf, ich bitte vielmals um Entschuldigung.
pseudopseudonym schrieb:
@t4ub3
Bevor der Neuling es von dir falsch lernt:

C:
int eingabeüberprüfung () {
  int ret, x, y;
  char c;

  printf ("Koordinateneingabe: x,y\n");
  ret = scanf("%d,%d%c", &x, &y, &c);
  while ((ret != 3 || c != '\n' || x < 1) {
    while ((c = getchar()) != '\n' && c != EOF) {};
    printf ("Bitte eine richtige Eingabe im Format x,y machen!");
    ret = scanf("%d,%d%c", &x, &y, &c);
  }
  printf ("%d", ret);
  printf ("Richtige Eingabe");
  return 1;
}
Ergänzung ()

In der Zeile:
C:
  while ((ret != 3 || c != '\n' || x < 1) {
Ist schon mal die Klammerung falsch, das lässt sich also gar nicht kompilieren.


Danke, das hab ich falsch reinkopiert, nachdem ich ein paar Sachen ausprobiert hatte. :)
Trotzdem funkioniert es leider nicht, wie
 
Aircrackpvt schrieb:
Das wusste ich nicht, bin zum ersten Mal hier unterwegs. Ich achte in Zukunft drauf, ich bitte vielmals um Entschuldigung.
Ergänzung ()





Danke, das hab ich falsch reinkopiert, nachdem ich ein paar Sachen ausprobiert hatte. :)
Trotzdem funkioniert es leider nicht, wie

Das ist dein Code...
Oder verstehe ich dich gerade falsch?
 
Das getchar() um zusätzliche Entertaste-Eingaben abzufangen, ist nicht so schön. Nimm am besten fgets(), um zunächst eine gesamte Zeile einzulesen, und parse die dann mit sscanf(). Also so:
C:
int eingabeueberpruefung () {
int ret, x, y;
char c;
char s[100] ={0};

printf ("Koordinateneingabe: x,y\n");
fgets(s, 100, stdin);
ret = sscanf(s, "%d,%d%c", &x, &y, &c);
while (ret != 3 || c != '\n' || x < 1) {
    printf ("Bitte eine richtige Eingabe im Format x,y machen!\n");
    fgets(s, 100, stdin);
    ret = sscanf(s, "%d,%d%c", &x, &y, &c);
}
printf ("%d", ret);
printf ("Richtige Eingabe: ");
printf("x: %d, y: %d", x,y);
return 1;
}
 
Zurück
Oben