Использование scanf для определенных входов - PullRequest
0 голосов
/ 19 января 2019
#include<stdio.h>

int main(void)
{
    char z[10];
    scanf("%[aeiou]",z);
    printf("%s",z);
    return 0;
}

Я пытаюсь ввести строку и хочу вывод, который включает a, e, i, o, u только так, как указано в функции scanf. Я хочу попробовать получить вывод, используя только scanf.

1 Ответ

0 голосов
/ 19 января 2019

1) Избегайте формата строки без ширины, такого как "%[aeiou]" - он подвержен переполнению.

2) Проверьте scanf() возвращаемое значение.

Чтобы избежать ограничений, таких как 10, считывайте ввод в цикле.

int main(void) {
    char z[10];
    while (scanf("%9[aeiou]",z) == 1) {
      printf("%s",z);
    }
    printf("\n");
    return 0;
}

Если код должен читать ввод, такой как xxxaxxxaxxx, и выводить aa только с scanf(), требуется дополнительная работа.

Для ясности scanf() - не лучший инструмент для достижения этой цели.

Некоторая непроверенная идея о том, что нужно.

int main(void) {
  do {
    int cnt; 
    char z[10];
    while ((cnt = scanf("%9[aeiou]",z)) == 1) {
      printf("%s",z);
    }
    if (cnt == EOF) {
      break;
    }

    // Find the character that stopped scanning
    if ((cnt = scanf("%1[^aeiou]",z)) == 1) {
      if (z[0] == '\n') {
        break;
      }
    } else {
      break;
    }
  }
  printf("\n");
  return 0;
}
...