-         

Ergebnis 1 bis 3 von 3

Thema: Falsche Eingabe vermeiden

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.01.2005
    Ort
    HH
    Alter
    32
    Beiträge
    215

    Falsche Eingabe vermeiden

    Anzeige

    Hi!

    Es hat zwar jetzt nichts mit MCs zu tun, aber ich poste es trotzdem mal hier. Es handelt sich ja immerhin um ANSI-C.

    Ich habe nämlich folgendes Programm:
    Code:
    #include <stdio.h>
    
    int main(void)
    {
    int r=0, zahl=9;
    while(r==0)
    {
      printf("Geben Sie eine Zahl ein: ");
      r = scanf("%i",&zahl);
    }
    return 0;
    }
    Ich möchte jetzt, dass wenn ein Buchstabe oder irgendwas anderes als eine Integer-Zahl eingegeben wird, dass die Aufforderung eine Zahl einzugeben nochmal kommt.
    Gebe ich eine ganze Zahl ein beendet das Programm einfach. Das ist soweit ok.
    Gebe ich jetzt irgendeinen Buchstaben ein, gibt er mir in einer Endlosschleife den Text vom printf-Befehl aus und überspringt irgendwie immer den scanf-Befehl.

    Was läuft da falsch?
    Ausführen, programmieren, compilieren lasse ich das ganze mit MS Visual C++.

    MfG
    Martin
    Motio - Roboterarm - nähre Infos auf http://www.martin-jacobsen.de

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    -1- Du liest einen String ein mit scanf ("%s... oder getline
    -2- Du scanst den String, ob es eine Zahl ist. Z.B mit sscanf.

    Das Problem bei dir ist wohl, daß bei fehlerhafter Eingabe die Zeichen nicht aus dem Eingabestrom entfernt werden. r ist ja auch 0.
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.01.2005
    Ort
    HH
    Alter
    32
    Beiträge
    215
    Hallo!

    Vielen Dank für deine Antwort. Das Problem hat sich mittlerweile gelöst.

    Habe erfahren, dass das Problem war, wenn ich einen String eingegeben habe bleibt die Fehlerhafte Eingabe im Puffer und man muss sie manuell entfernen. Habe mir schon sowas gedacht. Ich habe jetzt folgendes benutzt:
    fflush(stdin);

    Damit geht es.
    Programm sieht jetzt so aus:
    Code:
    int main(void)
    {
    int r=0, zahl=9;
    while(r==0)
    {
      printf("Geben Sie eine Zahl ein: ");
      r = scanf("%i",&zahl);
      fflush(stdin);
    }
    return 0;
    }
    MfG
    Martin
    Motio - Roboterarm - nähre Infos auf http://www.martin-jacobsen.de

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •