#include<stdio.h>
int main(void)
{
char z[10];
scanf("%[aeiou]",z);
printf("%s",z);
return 0;
}
我试图输入一个字符串,并希望仅在scanf
函数中指定的输出包含a,e,i,o,u。我想尝试仅使用scanf
来获取输出。
答案 0 :(得分:1)
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;
}