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;
}