c-scanf格式的输入不适用于扫描的第一个字符



我正在尝试编写一个输出非元音字符的程序(没有if语句,使用格式化的scanf输入(。我当前拥有的代码不会将%*[]忽略的字符应用于扫描的第一个%c字符,但该限制适用于其他字符。例如;Andrew";变成";Andrw";而不是";ndrw";。我怀疑这可能是由于一开始的%c。有人能帮我吗?:(

#include <stdio.h>
#include <string.h>
int main(void) {
char c;
while (scanf("%c%*[aeiouAEIOU]", &c) == 1)
printf("%c", c);
return 0;
}

扫描格式按顺序匹配,因此%c首先匹配A。为此,您需要使用2个单独的扫描,或者在循环之前使用初始元音吃掉扫描f:

scanf("%*[aeiouAEIOU]");
while (scanf("%c%*[aeiouAEIOU]", &c) == 1) { 
printf("%c", c);
}

问题是,这比更清楚、更好吗

int c;
while ((c = getchar()) != EOF) {
if (! strchr("aeiouAEIOU", c)) {
putchar(c);
}
}

我有一个固执己见的答案。。。