2017-01-07 2 views
0

Ich muss prüfen, ob ein Benutzereingabewert kein int-Wert ist. Ich habe verschiedene Kombinationen ausprobiert, was ich weiß, aber ich entweder nichts bekommen oder zufällige FehlerWie überprüfe ich, ob die Benutzereingabe kein int-Wert ist? C

Wenn der Benutzer eine beliebige char Eingänge wird es eine Warnmeldung erhöhen

das ist, was geschrieben ive

#include <stdio.h> 

//C program to perform addition, subtraction, multiplication, division + - */

int main() 
{  
    int num1,num2; 
    char alpha[30] 

    printf("enter numbers:\n\n"); 

    printf("number 1: "); 
    scanf("%d",&num1); 

    printf("number 2: "); 
    scanf("%d",&num2); 

    // write a funcntion that when a char is entered to display an error 

    if (num1//and num2 == alpha) 
     printf("error"); 


     else { 

    printf("Rezultat: \n"); 

    printf("sborut im e: %d\n",num1+num2); 
    printf("ralikata im e: %d\n",num1-num2); 
    printf("proizvedenieto im e: %d\n",num1*num2); 
    printf("ralikata im e: %d\n",num1/num2); 

      } 
    return 0; 
} 
+0

müssen Sie verwenden 'versuchen catch' den Fehler zu behandeln –

+0

den Code auswählen. Klicken Sie auf den Code-Button ** '{}' **, um den Code korrekt zu formatieren. – user3386109

+4

@Mohsen_Fatemi - nein "Versuch fangen" in "C" – TonyB

Antwort

2

Scanf hat einen Rückgabewert aus einem Grund.

1-3) Anzahl von Empfang Argumenten erfolgreich zugewiesen (die Null im Fall trat ein Anpassungsausfall sein kann, bevor das erste Empfang Argumente zugewiesen wurde), oder wenn EOF auftreten Eingangsfehler vor dem erste Empfang Argument war zugewiesen.

4-6) Selber wie (1-3), mit der Ausnahme, dass EOF auch wenn es eine Laufzeiteinschränkungsverletzung zurückgeführt wird.

Hier ist ein Beispielprogramm, das Informationen mit:

#include <stdio.h> 
int main(int argc, char **argv) { 
    int inputInteger; 
    printf("Please provide some input.\n"); 
    if(scanf("%d", &inputInteger) == 1) { 
     printf("You inputted an integer\n"); 
    } else { 
     printf("You did not enter an integer\n"); 
    } 
    return 0; 
} 

Ausgang:

./a.out 
1[Enter] 
You inputted an integer 

./a.out 
hello[Enter] 
You did not enter an integer. 

Hinweis: Ich fühle mich verpflichtet, Ihnen mitzuteilen, dass scanf() nicht der beste Weg ist, zu erhalten Eingang. Weitere Details finden Sie unter this.

EDIT: Ich änderte if(scanf("%d", &inputInteger))-if(scanf("%d", &inputInteger) == 1) so dass EOF nicht ausgegeben, dass eine ganze Zahl gefunden wurde (von chux in den Kommentaren darauf hingewiesen).

+0

okay, aber wie für zwei scanf wie mein Fall zu überprüfen if (scanf ("% d", & num1) (was bleibt dazwischen) scanf ("% d", & num2) { printf ("stuff ... ") } – Toni03m

+0

@ Toni03m Verwenden Sie einfach den' && '-Operator in Ihrer 'if'-Anweisung.Wenn Sie nicht wissen, wie das geht, empfehle ich [ein grundlegendes Buch über C] (http: // stackoverflow. com/a/562377/4520911). – iRove

+0

Beachten Sie, wenn 'stdin' geschlossen ist (Dateiende),' scanf ("% d", & inputInteger) '' EOF' zurückgibt und dann 'printf (" Sie haben eine eingegeben integer \ n ");'. Besser zu verwenden 'if (scanf ("% d ", & inputInteger) == 1)'. – chux

0

ein try/catch Ansatz funktioniert, mit dem Gießen der Test auf int vom Compiler abgefangen wird

std::string input; 
std::getline(std::cin,input); 
int input_value; 
try { 
    input_value=boost::lexical_cast<int>(input)); 
} catch(boost::bad_lexical_cast &) { 
    // process bad input here 
} 
+3

wir sprechen für C Sprache – Toni03m

Verwandte Themen