Numerische Eingabe-Validierung in C

Ich mache ein Labor für eine intro-Programmierung Klasse

Ich habe, um sicherzustellen, dass eine ganze Zahl eingegeben wird. Ich dachte, dies würde es tun, aber wenn ich einen Brief wiederholt er in einer Endlosschleife.

Fand ich diese Lösung in einem anderen Beitrag

int num;
char term;

if (scanf("%d%c", &num, &term) != 2 || term != '\n')
    printf("failure\n");
else
    printf("valid integer followed by enter key\n");

Aber im nicht sicher, was ich falsch gemacht habe. Warum ist es nicht in meinen code?

#include <stdio.h>

int main(void)
{
    int oneVar;
    char term;
    double numOne;
    double numTwo;
    double sum;
    double dif;
    double quo;
    double mult;
    int checker = 1;

    do
    {
        printf("Please choose one of the following:\n""1) Add\n""2) Subtract\n""3) Divide\n""4) Multiply\n""5) Quit\n");

        if (scanf("%d%c" , &oneVar ,&term) != 2 || term != '\n')
        {
            printf ("This is not valid input\n\n");
            checker = 1;
        }
        else if (oneVar == 5)
        { 
            printf("Thank you. Goodbye.\n");
            checker = 0;
        }   
        else if (oneVar != 1 && oneVar !=2 && oneVar != 3 && oneVar != 4)
        {
            printf("This is not a valid input\n\n");
            checker = 1;
        }
        else
        {
            printf("Please enter the first number:\n");   
            if (scanf("%lf%c" , &numOne ,&term) != 2 || term != '\n')
            {
                printf ("This is not valid input\n\n");
                checker = 1;
            }
            printf("Please enter the second number:\n");
            if (scanf("%lf%c" , &numTwo ,&term) != 2 || term != '\n')
            {
                printf ("This is not valid input\n\n");
                checker = 1;
            }
            else if (oneVar == 1)
            {
                sum = numOne + numTwo;
                printf("The sum is: %.2lf\n" ,sum);
                checker = 0;
            }    
            else if (oneVar == 2) 
            {
                dif = numOne - numTwo;
                printf("The difference is: %.2lf\n" ,dif);
                checker = 0;
            }
            else if (oneVar == 3) 
            {
                quo = numOne / numTwo;
                printf("The quotient is: %.2lf\n" ,quo);
                checker = 0;
            }
            else if (oneVar == 4) 
            {
                mult = numOne * numTwo;
                printf("The product is: %.2lf\n" ,mult);
                checker = 0;
            }
            else if (oneVar == 5)
            {
                printf("Thank you. Goodbye.\n");
                checker = 0;
            }
        }
    } while (checker == 1); 

    return(0);
}

Mein prof dies geschrieben, Im nicht sicher, wie es hilft, aber ich dachte, es könnte jemand helfen
Um sicherzustellen, dass ein Benutzer-Eingabe-Zahl ist eine ganze Zahl, die Sie verwenden können, die Vorstellung von Gießen. Gießen ist ein Weg, zu sagen, C) zur Behandlung einer Variablen als ob es eine variable eines anderen Typs.

so, wenn ich etwas wie dieses:

double myDouble;

myDouble = 5.43;

printf ("%d", (int) myDouble);

Wird es Ihnen sagen, C-print myDouble, aber um es zu behandeln wie ein integer. Nur die 5 wird gedruckt, und Sie gewann T get any type mismatch-Fehler. Sie können verwenden Sie casting, um zu sehen, wenn ein Eingabe-Zahl ist eine Ganzzahl, die durch den Vergleich der Eingabe der (int) cast der Reihe. So etwas wie dies funktionieren sollte:

if(inputNum == (int) inputNum)

Erhalten Sie immer noch 1.0 und 2.0 bestehen als gültige zahlen, aber das ist ok für jetzt.

  • Hier ist noch etwas hinzuzufügen, um Ihre Ausbildung: Sie Lernen zu denken wie ein Programmierer. Zu sagen "es geht drunter und drüber" sagt uns absolut nichts darüber aus, was genau passiert. Nicht nur, herauszufinden und zu artikulieren, das Ergebnis bekommen Sie machen es viel einfacher für Menschen auf stackoverflow, um Ihnen zu helfen, aber es hilft Ihnen auch Entwickler, Ihre analytischen Fähigkeiten.
  • Sind Sie auf unix-oder MS Windows? Unter MS Windows ist es nicht ganz so funktioniert, wie, dass
  • Ich sagte, dass, weil ich war nicht sicher, wie Sie es beschreiben, aber im Grunde ist es nur wiederholt immer und immer wieder in einer endlos-Schleife. Ich verwende einen raspberry pi mit einem custom OS für mein Programm. Wie gesagt ich bin ein Anfänger sorry, wenn meine Sprache nicht bis zu par, aber ich Tue mein bestes! hoffentlich klärt meine Frage.
  • Hey Samantha, herzlich willkommen auf StackOverflow! Vielleicht finden Sie die Frage Checkliste hier hilfreich - es wird uns helfen, besser Ihre Fragen zu beantworten und geben Ihnen die Hilfe die Sie benötigen. Viel Glück und frohes Programmieren!
  • Wenn Sie gefunden, die Lösung auf StackOverflow, würde ich erwarten, dass es nach unten gestimmt.
  • Ich Bemerke aus deinen anderen posts, dass du ein paar Probleme mit der Zusammenstellung und genaue syntax - meistens Tippfehler, dass der Ertrag Diagnosemeldungen verwirrend für einen Anfänger, der aber geschlossen schnell auf StackOverflow. Wenn Sie die Kodierung mit einem einfachen text-editor und Kommandozeilen-compilation auf RPi, kann ich nur empfehlen, Code::Blocks für RPi, die syntax-highlighting-editor und integrierten debugger wird Ihnen helfen, Ihre eigenen Lösungen zu diesen starter-Probleme. Seine Verfügung über den Pi Store oder von sudo apt-get install codeblocks.
  • Dank Clifford ich werde prüfen, ob aus!
  • mögliche Duplikate von Überprüfen Sie, ob input ist ganze Zahl in C

Schreibe einen Kommentar