当输入与格式不匹配时,scanf_s会返回什么?

时间:2018-04-03 11:03:11

标签: c scanf

我想知道实例中发生了什么,例如:

let result1 = try context.fetch(request)
for r in result1{
    print(r)
}

也就是说,当scanf期望输入是一个整数,而是用户输入一个浮点值,一个double或其他任何东西.......然后将值赋给变量,或者是刚出现在后台?它的存在能否以某种方式对该程序以后的工作方式产生不利影响?

2 个答案:

答案 0 :(得分:4)

  

但是用户输入浮点值,双精度或其他任何

用户始终输入字符串。这就是I / O的工作原理。

使用格式字符串,scanf()尝试从输入字符串中提取第一个子字符串,该子字符串看起来像使用格式说明符的数据的文本表示,然后它恢复将在格式化时产生上述文本表示的数据使用printf()使用相同的格式说明符。

在您的示例中,由于%dscanf()从输入字符串中使用它在字符串开头找到的位数。它跳过前导空格,读取可选符号(如果存在),读取数字并在达到非数字字符时停止读取。它使用符号和读取数字重新创建数字,并将其放在它作为参数接收的地址。

如果格式字符串中没有更多的说明符,它使用字符串的其余部分来完成下一个格式说明符(如果有的话)或完全忽略它(但它不会使用它)。

答案 1 :(得分:3)

这在scanf documentation

中指定
  

空白字符:该函数将读取并忽略在下一个非空白字符之前遇到的任何空格字符

d说明符下,提取的字符为:

  

任意数量的十进制数字(0-9),可选地以符号开头(+   要么 -)。 d表示签名参数,u表示无符号。

因此,它从流中消耗所有前导空格字符和第一个数字(+/-符号和整数),并在有不匹配的字符时停止。

此外,

  

任何说明者都应使用至少一个字符。否则匹配失败,扫描结束。