2013-11-10 7 views
1

Я получаю пользовательский ввод, и я хочу определить, ввел ли пользователь букву, целое число или оператор. Я могу успешно определить, является ли это целым числом с помощью sscanf, но я не понимаю, как определить, является ли это буквой.Как проверить, является ли строка буквой (a-z или A-Z) в c

Под буквой, я имею в виду: A-Z, a-z.

int main(){ 
    char buffer[20]; 
    int integer; 
    printf("Enter expression: "); 
    while (fgets(buffer, sizeof(buffer), stdin) != NULL){ 
     char *p = strchr(buffer, '\n'); //take care of the new line from fgets 
     if (p) *p = 0; 

     //Buffer will either be a integer, an operator, or a variable (letter). 
     //I would like a way to check if it is a letter 
     //I am aware of isalpha() but that requires a char and buffer is a string 

     //Here is how I am checking if it is an integer 
     if (sscanf(buffer, "%d", &integer) != 0){ 
      printf("Got an integer\n"); 
     } 
     else if (check if letter) 
      // need help figuring this out 
     } 
     else{ 
      // must be an operator 
     } 
    } 
} 
+1

BTW: Если вы ввели только пробелы, '(sscanf (»», "% D", & целое число)' даст -1 и _pass_ ваш тест «Got integer \ n». Рекомендуйте в будущем использовать _ подтверждающие_ 'sscanf()' сравнительные тесты, такие как 'sscanf (buffer,"% d ", & integer) == 1' для' sscanf (..., " % d ", ...)' можно ожидать, чтобы возвращать 0, 1 или EOF. – chux

ответ

5

Вы можете использовать isalpha() и isdigit() стандартные функции. Просто включите <ctype.h>.

 if (isdigit(integer)) != 0){ 
     printf("Got an integer\n"); 
    } 
    else if (isalpha(integer)) 
     printf"Got a char\n"); 
    } 
    else{ 
     // must be an operator 
    } 
+0

Спасибо за предложение, но как изменить буфер на целое число? –

+1

просто используйте первый символ буфера и отбросите его на 'int '. –

+1

Удивительно, это работает! Я никогда не думал просто использовать первый символ буфера, в нужный момент, спасибо, спасибо! –

7

Чтобы узнать, если вход письмо или цифра:

  • int isalpha (int c); функции для проверки c является ли алфавитным письмом.
  • int isalnum (int c); функции для проверки, является ли c либо десятичной цифры или прописных или строчными буквами.
  • int isdigit (int c); функция для проверки: c является знак десятичной цифры.

Чтобы узнать, если письмо прописные или строчными:

  • int islower (int c); для проверки c ли строчной буквой: аз
  • int isupper (int c); чекам ли cзаглавная буква: A-Z

Поместите их в if заявления, которые делают что-то (или truefalse), в зависимости от результата.

PS Вы можете узнать больше о стандартной библиотеке здесь: Character handling functions: ctype.h