2016-03-19 14 views
0

Hallo diesen Teil meines Codes. Es prüft, ob der eingegebene Wert in der Basis 2 ist oder nicht. Ich arbeite, wenn ich Ganzzahl-Wert eingeben. Aber ich möchte den Code auf Zeicheneingaben überprüfen lassen. Wie kann ich das machen?Wie überprüft man, ob die Eingabe Buchstabe C ist?

#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 

int main() 
{ 
    int DataForBase1,DataForBase1A,CheckForBase1; 

    printf("For disk1 enter data in base 2: "); 
    scanf("%d",&DataForBase1); 

    DataForBase1A=DataForBase1; 

    while(DataForBase1!=0) 
    { 
     CheckForBase1=DataForBase1%10; 
     if((CheckForBase1!=0) && (CheckForBase1!=1)) 
     { 
      printf("ERROR: This is invalid input for base 2\n"); 
      printf("For disk1 enter data in base 2: "); 
      scanf("%d",&DataForBase1); 
     } 
     else 
      DataForBase1=DataForBase1/10;  
    } 

    system("pause"); 
    return 0; 
} 
+0

Dann ist es gut, dass C viele [character Klassifikationsfunktionen] (http://en.cppreference.com/w/c/string/byte#Character_classification) hat. Es kann auch hilfreich sein, das richtige Format für [scanf] (http://en.cppreference.com/w/c/io/fscanf) zu verwenden. –

+0

Da der Benutzer eine Binärzahl eingeben soll, ist es wahrscheinlich am einfachsten, eine For-Schleife zu schreiben, die jeweils ein Zeichen liest und überprüft, ob es "0" oder "1" ist. – user3386109

+0

Würden Sie 'fgets()' anstelle von 'scanf()' in Erwägung ziehen? – chux

Antwort

0

können Sie sagen, dass die Zeichen an der aktuellen Eingabeposition stellen keine Nummer, die Sie dies tun könnte:

int count = scanf("%d", &DataForBase1); 
if (count == 0) { 
    // Nothing was read 
    ... 
} 

Wenn Sie feststellen, dass scanf Null zurückgekehrt ist, kalt Sie lesen und eine ignorieren string, drucke eine Fehlermeldung und gehe zurück, um einen numerischen Wert erneut zu lesen.

+0

Vielen Dank, aber was ist, wenn ich sowohl Nummer als auch Zeichen wie 12a eingeben? – user302686

+0

@ user302686 Dann müssen Sie die Daten als String lesen und die einzelnen Teile durch Aufrufen anderer Funktionen, wie z. B. ['strtol'] (http://en.cppreference.com/w/c/string/byte/strtol). – dasblinkenlight

+0

Leider darf ich keine anderen Funktionen verwenden. – user302686

1

Verwenden Sie eine %c kurz nach der %d in scanf().
Zum Beispiel:

int DataForBase1,DataForBase1A,CheckForBase1; 
char ch; 

printf("For disk1 enter data in base 2: "); 
scanf("%d%c",&DataForBase2, &ch); 

diese Weise

  • Wenn Sie Zahlen wie 11d treten, 63f etc, wird die %c die zusätzlichen Zeichen nach Nummer essen-up und
  • . Bei Eingabe reiner Zahlenwerte wie 11, 63 usw.. %c wird das \n Zeichen enthalten. So wird Ihr Programm gut funktionieren.

PS .: Eingangs Annahme basiert auf einem anderen 'just-deleted' Post, wo Sie den gleichen Code geschrieben hatte.

1

betrachten diese http://www.tutorialspoint.com/c_standard_library/ctype_h.htm

#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 

#include <string.h> 
#include <ctype.h> 

#define MAX 80 /* max characters to read in */ 


int Parse_String (char str[], int *DataForBase1) 
{ 
     /* do all checking on user input */ 
     /* use functions from ctype.h and string.h */ 
     /* ctype.h will have functions to allow checking if number or character */ 

     int i, len, value; 
     int result = 1; 

     *DataForBase1 = -1; 

     len = strlen(str); 
     for (i = 0; i < len; i++) 
     { 
      if (! isalnum(str[i]) 
      { 
       result = 0; 
       break; 
      } 
     } 

     /* write another for loop here checking every character is either 0 or 1 */ 
     /* and if any is not then set result = 0 and handle accordingly */ 

     i = sscanf(str, "%d", &value); 
     if (i != 1) 
     { 
      *DataForBase1 = -1; 
      result = 0; 
     } 
     else 
     { 
      *DataForBase1 = value; 
     } 

     return result; 
} 

int main() 
{ 
    char str[MAX]; 
    int result; 
    int DataForBase1,DataForBase1A,CheckForBase1; 

    printf("For disk1 enter data in base 2: "); 
    fgets(str, MAX, stdin); 

    result = Parse_String(str, &DataForBase1); 

    if (result == 1) 
     DataForBase1A=DataForBase1; 
    else 
    { 
     /* handle error condition here */ 
    } 

    while(DataForBase1!=0) 
    { 
     CheckForBase1=DataForBase1%10; 
     if((CheckForBase1!=0) && (CheckForBase1!=1)) 
     { 
      printf("ERROR: This is invalid input for base 2\n"); 
      printf("For disk1 enter data in base 2: "); 
      scanf("%d",&DataForBase1); 
     } 
     else 
      DataForBase1=DataForBase1/10;  
    } 

    system("pause"); 
    return 0; 
} 
Verwandte Themen