Сканирование пустого пространства с помощью fgets () - PullRequest
0 голосов
/ 07 ноября 2019

Я запускаю пользовательский ввод через ряд функций, предоставляемых библиотекой ctype.h, но scanf не работает для пробелов.

Поскольку я не могу использовать scanf для пробелов, я считаю, что fgets() должен быть тем, что я ищу, но не уверен насчет последнего параметра, который я бы использовал для него. Буду признателен за любой совет!

#include <stdio.h>
#include <ctype.h>

int main(void) {
  char a;

  puts("Enter a character:");

  //scanf("%s", &a);
  fgets(a, 1, ??);


  printf("isblank('%c')  = %d \n", a ,isblank(a)); 
  printf("isdigit('%c')  = %d \n", a ,isdigit(a));
  printf("isalpha('%c')  = %d \n", a ,isalpha(a));
  printf("isalnum('%c')  = %d \n", a ,isalnum(a));
  printf("isxdigit('%c') = %d \n", a ,isxdigit(a));
  printf("islower('%c')  = %d \n", a ,islower(a));
  printf("isupper('%c')  = %d \n", a ,isupper(a));
  printf("tolower('%c')  = %d \n", a ,tolower(a));
  printf("toupper('%c')  = %d \n", a ,toupper(a));
  printf("isspace('%c')  = %d \n", a ,isspace(a));
  printf("iscntrl('%c')  = %d \n", a ,iscntrl(a));
  printf("ispunct('%c')  = %d \n", a ,ispunct(a));
  printf("isprint('%c')  = %d \n", a ,isprint(a));
  printf("isgraph('%c')  = %d \n", a ,isgraph(a));

  return 0;
}

Вывод должен выглядеть следующим образом

Enter a character:
 C
isblank('C')  = 0 
isdigit('C')  = 0 
isalpha('C')  = 1024 
isalnum('C')  = 8 
isxdigit('C') = 4096 
islower('C')  = 0 
isupper('C')  = 256 
tolower('C')  = 99 
toupper('C')  = 67 
isspace('C')  = 0 
iscntrl('C')  = 0 
ispunct('C')  = 0 
isprint('C')  = 16384 
isgraph('C')  = 32768

Программа должна получить один символ и преобразовать его в целое число с помощью ряда функций.

1 Ответ

2 голосов
/ 07 ноября 2019

Первый аргумент fgets() должен быть буфером, который может содержать всю строку ввода.

int main(void) {
  char a;
  char line[100];
  puts("Enter a character:");

  fgets(line, sizeof line, stdin);
  a = line[0];
...