用scanf()取的整数不能在C语言中获得其预期值,它固定在8

问题描述 投票:0回答:1

这是我的C代码:

#include "stdio.h"

int main()
{
  int minx, x;

  printf("Enter two ints: ");
  scanf( "%d-%d", &minx, &x);

   printf("You wrote: minx is %d x is %d", minx, x);
}

当输入是5-35--3时,输出是您写道:minx是5 x是3这很有意义。但是,当输入为5 -35-36 -4时,输出为您写道:minx为5 x为8。我期望-跳过空格,所以我期望minx5x364 作为其他输入。即使使用相同的输入,当-中的%d-%d更改为?*+时,也会发生这种情况。我知道可能是因为第一个int之后的空间。在这里它说只有树格式说明符不会跳过空白。Whitespace before %c specification in the format specifier of scanf function in C我搞错了吗,为什么-在这里不跳过前导空格,这是什么实际问题,是什么原因,为什么呢? 8,还有哪些其他运算符或字符会导致类似的问题?

c input output scanf
1个回答
0
投票

让我们详细了解scanf格式说明符"%d-%d"

  • [%d如有必要,请跳过空格,然后读取整数
  • [-匹配文字'-'字符
  • [%d如有必要,请跳过空格,然后读取整数

所以输入5-35- 3都可以正常工作。但是,当输入为5 -3(或其他任何在-之前有空格的内容)时,解析将失败,因为scanf不会立即看到它期望的-

[如果不是您所期望的,或者不是您想要的,或者那没有道理,或者如果那不是您希望scanf起作用的方式,恐怕太糟糕了:scanf以其工作方式运行。

您如何解决此问题?这部分取决于您为什么首先在格式字符串中包含-字符。

© www.soinside.com 2019 - 2024. All rights reserved.