2016-06-12 3 views
-1

Das Problem, das ich lösen muss, ist wie folgt: -Schreiben Sie eine Funktion mit dem Namen "is_digit", die ein Zeichen als Eingabe akzeptiert und einen ganzzahligen Wert zurückgibt 1, wenn die Parametereingabe eine ASCII-Ziffer zwischen 0 und 9 ist. Andernfalls muss die Funktion den Wert 0 zurückgeben.C macht eine Funktion Gibt 1 zurück, wenn Benutzereingabe 0-9 ist ASCII

- Rufen Sie in der Hauptfunktion is_digit auf und übergeben Sie ein Argument basierend auf Benutzereingaben. Die Hauptfunktion muss dann das Ergebnis vom Aufruf von is_digit ausgeben.

Dies ist, was ich bisher

#include <stdio.h> 

     char is_digit(int x) 
     { 
      if (x > '48' && x < '57') //The ascII range between 0-9 (i think...) 
      { 
       return 1; 
      } 
      else      
//Whatever the user input is it always runs the else 
      { 
       return 0;    
//Is this what the question means by "function must return a value of 0" 
      } 
     } 

     int main() 
     { 
      char x; 
      printf("input: "); 
      scanf("%c", &x); 
      is_digit(x); 
     } 

Warum ist mein Programm nicht Rückkehr 1, wenn meine Benutzereingabe 0-9 ist ??

Aktualisierte Version mit Kommentaren berücksichtigt:

#include <stdio.h> 

char is_digit(char x) 
{ 
    if (x >= 48 && x <= 57) 
    { 
     printf("1"); 
     return 1; 
    } 
    else 
    { 
     printf("0"); 
     return 0; 
    } 
} 

int main() 
{ 
    char x; 
    printf("input: "); 
    scanf("%c", &x); 
    is_digit(x); 
} 
+0

Der Test 'if (x> '48' && x <'57')' ist falsch. Entfernen Sie die einfachen Anführungszeichen und verwenden Sie '> =' anstelle von '>' (auch '<=' anstelle von '<') – Aziz

+0

Sie vergleichen ein int mit einem Zeichen (in etwa: ein Zeichen mit zwei Elementen; nicht sicher wie gültig das ist). Bitte benutzen und * lesen * Ihre Compiler Warnungen. – Evert

+0

Whoops, repariert meine if-Aussage, am meisten geschätzt! Aber meine Funktion kommt immer noch nicht zurück 1 ..... –

Antwort

0

Ihr Fehler ist, mit

if (x > '48' && x < '57') //The ascII range between 0-9 (i think...) 

Es

if (x > 47 && x < 58) //The ascII range between 0-9 (i think...) 

Der korrigierte Code unten

gezeigt
#include <stdio.h> 

      int is_digit(char x) 
      { 
       if (x > 47 && x < 58) //The ascII range between 0-9 (i think...) 
       { 
        return 1; 
       } 
       else      
    //Whatever the user input is it always runs the else 
       { 
        return 0;    
    //Is this what the question means by "function must return a value of 0" 
       } 
      } 

      int main() 
      { 
       char x; 
       printf("input: "); 
       scanf("%c", &x); 
       printf("result is: %d",is_digit(x)); 
       return 0; 

      } 
sein sollte

Eine Return-Anweisung in der Programmierung ist ein Beweis dafür, was der Computer getan hat. In c und C++ bedeutet die Rückgabe von 0 in main, dass Ihr Programm korrekt beendet wurde, ohne dass es zum Absturz kommt, aber nicht unbedingt, dass Sie falsch oder richtig codieren.

+0

Seufzer. Schreiben Sie einfach das offensichtliche 'if (x> = '0' && x <= '9')', dann müssen Sie nicht wissen oder sich darum kümmern, was die ASCII-Werte sind und riskieren nicht, sie falsch zu verstehen. –

+0

Die Zuweisung besteht darin, das Ergebnis von is_digit zu drucken. Dieses Programm macht das nicht. Die Rückgabe von 'is_digit (x)' ist falsch. –

0

Ihr Rückgabetyp ist char, dies versuchen:

int is_digit(int x) 
+0

Schreiben Sie eine Funktion mit dem Namen is_digit, die ein "char als Eingabe" akzeptiert und einen ganzzahligen Wert von 1 zurückgibt. Das Zeichen als Eingabeanforderung ist, was mich irgendwie auf diese Frage stolpert. Wenn es int Eingabe wäre, wäre es ein Stück Kuchen. –

+0

@ F.Horn Warum? 'scanf ("% c ", & x)' liest ein Zeichen in 'x' - Stück Kuchen. Das Testen kann mit 'int is_digit (int x) {Rückkehr x> = '0' && x <= '9'; } - ein weiteres Stück Kuchen. –

+0

"Schreiben Sie eine Funktion namens" is_digit ", die ein Zeichen als Eingabe akzeptiert" ist Teil der Fragen Anforderungen –

0

Kurz gesagt: weil Sie sagen es nicht zu tun. Die letzte Zeile sollte sein:

return is_digit(x);

Ohne die return wird das Ergebnis von is_digit() einfach weggeworfen ...

+0

Vielen Dank! Wie dumm von mir. Das löst dieses Problem. Es gibt zurück und int, aber meine Funktion führt immer die Else-Anweisung? Gibt es Hinweise darauf, warum die if-Anweisung nicht ausgeführt wird? –

+0

Fragen Sie den Computer, welchen Wert er für x hat. Statt 'printf (" 0 ");' 'printf ("% d ", x);' Es wird der Wert für x anstelle von einfach '0' ausgedruckt - Sie können dann herausfinden, was x ist. Es sollte in diesem Bereich sein, aber vielleicht hast du zuerst ein Leerzeichen eingegeben? Oder ein ? Oder etwas anderes. Wenn die Ausgabe 32 oder weniger ist, dann ist es ein Leerzeichen oder Schlüssel. Das ist das Problem mit 'scanf ("% c ")' - es scannt das nächste Zeichen, egal was es ist –

1

Try this: Auch in Verwendung 'unsigned char x' zu beachten, Ihre Haupt bedeutet dies grundsätzlich positive Werte 0-255

#include <stdio.h> 

int is_digit(int x) 
{ 
    if (x >= 48 && x <= 57) 
     { 
      return 1; 
     } 
    return 0; 
} 

Es wäre besser, Ihre Methode zu ändern, um einen int und nicht char zurückzukehren.

die einfachen Anführungszeichen entfernen, weil Sie die Zahlenwerte der ASCII-Zeichen (int)

Auch die und ‚> =‘ Zeichen, weil die Frage inklusive sagte ‚< =‘ verwenden zu vergleichen. '<' und '>' ist exklusiv.

Sie benötigen keinen else-Block, da die Antwort sofort zurückgegeben wird, wenn es sich um eine Zahl handelt.

"// Ist das, was die Frage bedeutet durch" Funktion muss einen Wert von 0 "zurückgeben?"

Ja, das ist es, was es bedeutet.

+0

int is_digit (int x) { zurück x> = '0' && x <= '9'; } –

1

Sie könnten einen direkten Vergleich machen:

int is_digit(char x) 
{ 
    int result; 
    if (x >= '0' && x <= '9') 
    { 
     result = 1; 
    } 
    else 
    { 
     result = 0; 
    } 
    return result; 
} 
+1

Ja, die anderen Antworten, die auf Integer-Werte getestet werden, sind inkompetent. Aber ... einfach 'return x> = '0' && x <= '9;' tut das Richtige und ist wahrscheinlich das, worauf der Instruktor hofft. –