【问题标题】:Comma between the two integers during the input输入期间两个整数之间的逗号
【发布时间】:2017-01-01 13:42:54
【问题描述】:

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

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

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

【问题讨论】:

标签: c input scanf format-string


【解决方案1】:

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

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

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

和,

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

所以,综合以上案例,

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

  • 对于像100 - 200 这样的输入,扫描将失败(匹配失败)并且j 的内容将保持不变,即j 没有分配任何值通过scanf()操作。

忠告:始终检查scanf()函数族的返回值,以确保函数调用成功。

【讨论】:

    猜你喜欢
    • 2019-05-10
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多