C忽略scanf上的破折号

Posted

技术标签:

【中文标题】C忽略scanf上的破折号【英文标题】:C ignore dashes on scanf 【发布时间】:2022-01-10 18:45:40 【问题描述】:

我正在尝试从以“ - ”分隔的字符串中加载两个值。 我不知道应该在 scanf 中添加什么来忽略这个破折号。

这是一个说明问题的简化 sn-p:

char first[3];
char second[3];

char* str = "foo - bar";
sscanf(str, "%s <what should be here> %s", first, second);

printf("%s %s", first, second);

如果占位符中没有放置任何内容,程序将打印“foo -”

【问题讨论】:

【参考方案1】:

要告诉scanf 期待-,请在格式字符串中输入-

sscanf(str, "%s - %s", first, second);

另外,使您的数组足够大以容纳您期望的字符以及终止空字符:

char first[4];
char second[4];

您还应该将scanf 限制为接收数组的大小:

sscanf(str, "%3s - %3s", first, second);

如果- 可能不存在,您需要额外的代码来处理它;一个简单的scanf 是不够的。同样,如果字符串可能超过三个字符,则需要额外的代码。

【讨论】:

似乎建议测试sscanf() 的返回值,否则数组应初始化为空字符串。 我尝试将“-”放在中间,但没有得到正确答案,难怪 char 数组太短。谢谢。 确保它实际上是一个'-'(连字符)而不是'–'(破折号)(还有一个第三个变种,它的名字现在我不知道) @DavidC.Rankin:连字符、短划线、短划线、数字短划线、水平条和水平扫描线 7,至少。 @EricPostpischil -- 我的立场是正确的。那些花哨的排版东西远远高于我的文字处理工资等级。破折号是我的想法,我知道单杠,但是图形破折号和水平扫描线对我的白话来说是新的。 (美好的一天——添加到它,现在查找它们:)Dashes and hyphens: A comprehensive guide

以上是关于C忽略scanf上的破折号的主要内容,如果未能解决你的问题,请参考以下文章

一个经常被忽略的c语言问题

Unix C 文件,scanf 忽略空格

解决protobuf忽略空返回值的问题

vs2022scanf函数的使用,使用scanf的报错-返回值被忽略:解决·方法

Scanf被忽略[重复]

禁止显示状态 警告 C6031 返回值被忽略: “scanf“.