2016-07-28 5 views
-1

Ich versuche ein Programm zu erstellen, in dem der Benutzer drei Ganzzahlen eingibt, und eine andere Funktion prüft, ob ihre Eingabe gültig ist. Wenn die Eingabe nicht gültig ist, muss der Benutzer drei neue Zahlen eingeben.Benutzereingaben nehmen und eine Funktion verwenden, um zu prüfen, ob sie gültig ist

#include <stdio.h> 
int sanitizedInput(int a, int b, int c) 
{ 
    if(scanf("%d", &a)==0) 
    { 
     printf("Not a number\n"); 
     return 1; 
    } 
    else if(scanf("%d", &b)==0) 
    { 
     printf("Not a number\n"); 
     return 1; 
    } 
    else if(scanf("%d", &c) == 0) 
    { 
      printf("Not a number\n"); 
      return 1; 
    }     
    else 
     return 0; 
} 
int main() 
{ 
    int a; 
    int b; 
    int c; 
    int check = 1; 

    do 
    { 
     check = 0; 

      printf("Enter a number:"); 
      scanf("%d",&a); 
      printf("Enter a number:"); 
      scanf("%d",&b); 
      printf("Enter a number:"); 
      scanf("%d",&c); 

      check = sanitizedInput(a,b,c); 
    }while(check); 
} 

Jedoch, wenn ich diesen Code ausführen, nachdem drei gültige Zahlen eingeben nichts zeigt im Terminal und der Code endet erst nach sechs ganzen Zahlen eingeben. (Es gibt auch andere Funktionen und Code in der Hauptfunktion, wenn dieser Code notwendig ist, das Problem sagen Sie mir zu finden und ich werde es posten.)

+2

Warum übergeben Sie Lesevariablen an Ihre Funktion und lesen Sie dann einfach weitere 3 Zahlen? – mame98

Antwort

1

Ihr Code und Ihr Schreibteil passend ist nicht .....

  1. Sie sollten überprüfen, die drei Zahlen gültig sind oder nicht erstens.
int sanitizedInput(int a, int b, int c) 
{ 
    if(a==0 || b==0 || c==0) 
    { 
     return 1; 
    } 
    else 
    { 
     printf("They are valid.....\n"); 
     return 0; 
    } 
} 

Dann, wenn einer von ihnen ungültig sind, werden Sie einen anderen drei Eingangs für die zurückgehenden Wert von 1 nehmen können. Weil while(1) ein true Zustand ist.

0

entfernen

 printf("Enter a number:"); 
     scanf("%d",&a); 
     printf("Enter a number:"); 
     scanf("%d",&b); 
     printf("Enter a number:"); 
     scanf("%d",&c); 

und bleiben mit check = sanitizedInput(a,b,c);, und fügen Sie printf ("etwas \ n") an die

else return 0; Block

und sehen, was

0

In Haupt geschieht() Sie tak sind Eingabe für drei Zahlen a, b, c und Übergabe dieser Variablen als Argumente für sanitizedInput().

Hier, anstatt die Variablen zu überprüfen, verwenden Sie wieder scanf(), die neue Eingabe nimmt.

if(scanf("%d", &a)==0) 

Der oben, wenn die Bedingung den Wert von ‚a‘ nicht überprüfen, wird es den Rückgabewert von scanf überprüfen() mit ‚0‘.

if-Anweisung wie diese

sein sollte
if(a==0) 
     scanf("%d",&a); 

ist dies für alle drei Variablen.

In der Hauptfunktion übergeben Sie Variablen an sanitizedInput(), dort überprüfen Sie Variablen und wenn nicht gültig nehmen Sie die Eingabe wieder, so dass die Variable, die Sie geändert haben, lokal für diese Funktion sind, die nicht in Haupt (). Also pass auf das auf. Hoffe das wird dir helfen.

0

In Ihrem while Schleife, rufen Sie tatsächlich scanf zweimal jede Variable (a,b,c), so dass Sie Eingangsnummer für 6 times.When sanitizedInput(a,b,c) abgeschlossen, es 0 zurück, so check 0, ist die Schleife zu denken over.I möglich tun mit Ihrem main:

int main 
{ 
    int a; 
    int b; 
    int c; 
    int check = 0; 
    do 
    { 
     check = sanitizedInput(a,b,c); 
     printf("check = %d\n",check); 
    }while(!check); 
    return 0; 
} 
Verwandte Themen