输入

2017-01-01 51 views
-2

,如果我做了以下输入

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

,并提供这将导致不成功匹配的输入到底会发生什么时?它会把垃圾存入j吗?

+3

您的输入是什么? –

+0

看起来像重复:http://stackoverflow.com/questions/15091284/read-comma-separated-input-with-scanf –

+3

[为什么不阅读手册页](https://linux.die.net/ man/3/scanf) –

回答

5

输入具有恰好匹配供给格式scanf()是成功。

引用C11,章§7.21.6.2,fsacnf(),(重点煤矿

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

和,

当所有指令 已经执行,或者如果一个指令失败(如下面详述),函数返回。

所以,合并上述情况下,

  • 对于像100, 200的输入时,扫描将是成功。 ij都将分别保持给定值100200

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

建议的意见:总是检查返回值为scanf()函数族来确保函数调用成功。