c - 用逗号读取输入(使用 sscanf)
问题描述
解决方案
添加到答案。您的格式字符串缺少实际的,
逗号,因此1,2,3,4
无法匹配。
你可以做这样的事情
#include <stdio.h>
int main()
{
char input[60];
char a1[2], a2[2], a3[2], a4[2];
printf("Enter info");
fgets(input, 60, stdin);
if (4 != sscanf(input,"%1[^,\n], %1[^,\n], %1[^,\n], %1[^,\n]", a1, a2, a3, a4))
return printf("Error"), 1;
printf("%c %c %c %c", a1[0], a2[0],a3[0], a4[0]);
return 0;
}
请注意错误检查sscanf
是否成功,它应该返回它填充数据的变量数。如果有效,它必须是 4。
更改参数的数组大小和格式字符串%
中的数字sscanf
以符合您的需要。
编辑:如果输入有太多参数,要让它抛出错误,你可以这样做
#include <stdio.h>
int main()
{
char input[60];
char a1[2], a2[2], a3[2], a4[2];
char temp[2];
printf("Enter info");
fgets(input, 60, stdin);
if (4 != sscanf(input,"%1[^,\n], %1[^,\n], %1[^,\n], %1[^,\n] %1[^\n]", a1, a2, a3, a4, temp))
return printf("Error"), 1;
printf("%c %c %c %c", a1[0], a2[0],a3[0], a4[0]);
return 0;
}
通过添加%1[^\n]
到格式的末尾sscanf
将尝试在四个参数之后读取另一个非空白字符。如果成功,则意味着 ex: 的输入中有太多参数1,2,3,4,5
。它将返回 5,这是它能够填充的数据数。但是,如果输入有效,则最后一个格式说明符不应匹配任何内容,因此如果输入有效,sscanf
则应准确返回 4。
推荐阅读
- terraform - Can't import aws_security_group.sg_name, would collide with an existing resource
- git - 在网络共享路径中创建 Git 存储库并在存储库中维护代码
- css - 如果单击页面链接,则关闭导航菜单
- java - 未能调用链代码名称:“lscc”,错误:交易返回失败:调用未定义的合约方法
- ios - UINavigationBar shadowImage 不适用于动态图像(深色模式)
- cassandra - 直方图溢出时无法计算最大值的上限
- javascript - 打印 Div ID html 内容 服务器端
- mysql - 用于插入和更新的 Mysql 存储过程与 where 数组
- app-config - 为什么编译后我的设置文件的更改没有被拾取
- android - 语言的 Android Live TV 新值资源目录不起作用