输入期间两个整数之间的逗号

时间:2017-01-01 13:42:55

标签: c input scanf format-string

如果我执行以下操作会发生什么?

scanf("%d,%d", &i, &j);

并提供导致匹配失败的输入?它会将垃圾存储到j吗?

1 个答案:

答案 0 :(得分:5)

输入必须完全匹配scanf()提供的格式才能成功。

引用C11,章节§7.21.6.2,fsacnf(),(强调我的

  

除了%说明符的情况外,输入项(或者在%n指令的情况下,   输入字符数)转换为适合转换说明符的类型。 如果   输入项不是匹配的序列,指令的执行失败:这   条件是匹配失败。除非*表示分配抑制,否则   转换结果放在下面第一个参数指向的对象中   尚未收到转换结果的format参数。如果是此对象   没有合适的类型,或者无法表示转换结果   在对象中,行为是未定义的。

  

当所有指令   已执行,或如果指令失败(详见下文),函数将返回。

所以,合并上述案例,

  • 对于100, 200之类的输入,扫描将会成功。 ij都将分别保留给定的值100200

  • 对于100 - 200之类的输入,扫描将失败(匹配失败),j的内容将保持不变,即j未分配 scanf()操作的任何值。

建议提示:始终检查scanf()函数系列的返回值,以确保函数调用成功。