c - 对特定输入使用 scanf
问题描述
#include<stdio.h>
int main(void)
{
char z[10];
scanf("%[aeiou]",z);
printf("%s",z);
return 0;
}
我正在尝试输入一个字符串,并希望仅包含scanf
函数中指定的 a,e,i,o,u 的输出。我想尝试仅使用scanf
.
解决方案
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;
}
推荐阅读
- javascript - 从对象值动态设置 col-* 值
- codenameone - 主题保存 png 访问被拒绝
- javascript - 当我尝试在 Vue.js 中使用作用域插槽时失败了
- haskell - 我可以使用强制来生成约束吗?
- c# - 优化 Excel 文件处理器
- javascript - 尝试在 Angular 客户端显示数据
- c# - 单击某些对象后计时器将无法继续工作(C# UNITY)
- android - 将 Chrome 自定义选项卡设置为对用户不可见/将其调整为非常小
- python - 更新 matplotlib 动画中的 x 轴标签
- mysql - Laravel:如何查询查询范围的结果