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

标签 c scanf

我想知道在这样的情况下会发生什么:

printf("How many sides do the polygon has: ");
scanf_s("%d",&n); 

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

最佳答案

but instead the user enters a float value, a double, or anything else

用户总是输入一个字符串。这就是 I/O 的工作方式。

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

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

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

关于c - 当输入不匹配格式时,scanf_s 返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49628460/

相关文章:

c - 为什么没有任何内容保存到我的字符数组中?

c - fscanf 没有正确读取 double

找不到这个简单的 C 代码有什么问题

c - strtol帮助为什么它返回0

c# - 如何在 C# Windows 应用程序中使用 RichEdit20W 控件?

c - 如何使用 scanf 在不知道值类型的情况下读取值

c - scanf和format有关吗?

c++ - gcc: 加载共享库时出错 -> 查找错误的库版本

c - Z3:提取数组解释

c - 使用 fscanf,将文件扫描到 C 中的结构中,但第一个参数已经失败