Abfangen von falschen Eingabe #3253



  • Hallo,
    wie fange ich denn bei dem folgenden programm falsche Eingaben am best ab?

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      float akm,ekm,liter;
    
      printf ("Geben Sie den Anfangskilometerstand ein:\n");
      scanf("%f",&akm);
    
      printf ("Geben Sie den Endkilometerstand ein:\n");
      scanf("%f",&ekm);
    
      printf ("Bitte geben Sie nun noch den Verbrauch in Liter an:\n");
      scanf("%f",&liter);
    
      printf ("Der Verbrauch pro 100 km ist %f Liter\n",liter * 100/(ekm-akm));
      system("PAUSE");	
      return 0;
    }
    

    ich hab es schon mit einer do - while schleife probiert. Da kann ich aber nur die "kleiner als 0 werte abfangen" . Ich hatte es dann probiert mit "Eingabe ungleich float Wert" Leider ohne Erfolg.

    Vielen dank für hilfreiche Antworten auch wenn ihr sicherlich über solche einfachen Fragen nur noch genervt seid. Leider finde ich aber nie eine passende Antwort per google.



  • So einfach wie du dir das vorstellst ist es nicht.

    Was ist für dich eine falsche Eingabe?



  • DirkB schrieb:

    So einfach wie du dir das vorstellst ist es nicht.

    Was ist für dich eine falsche Eingabe?

    Naja nen Buchstabe anstatt ner Zahl.
    Die typischen "verrutscher" auf der Tastatur.



  • scanf hat einen Rückgabewert, der dir mitteilt, ob die Umwandlung in den richtigen Typ geglückt ist.

    Beispiel:

    int x, status;
    status = scanf("%i", &x);
    

    Bei einer Eingabe 'a' hat status den wert 0, da a nicht in den Typ int umgewandelt werden kann. Bei der Eingabe 3 hätte status den Wert 1, da eine Umwandlung erfolgt ist. Außerdem gibt es noch den Rückgabewert EOF, der bei einem Problem beim Einlesen auftritt.
    Bei der Eingabe 3a hätte status zwar den Wert 1, da 3 ein int Wert ist, das a würde aber im Eingabe-Puffer bleiben. Man muss also noch überprüfen, ob sich Restzeichen im Puffer befinden, also, ob das nächste Zeichen im Puffer '\n' ist (Bei einer korrekten Eingabe ist '\n' immer das letzte Zeichen, da mit Enter bestätigt wird). Dafür bietet sich getchar(); an.


Anmelden zum Antworten