这是我的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-3或5--3时,输出是您写道:minx是5 x是3这很有意义。但是,当输入为5 -3或5-3或6 -4时,输出为您写道:minx为5 x为8。我期望-跳过空格,所以我期望minx为5和x为3,6和4 作为其他输入。即使使用相同的输入,当-
中的%d-%d
更改为?
,*
,+
时,也会发生这种情况。我知道可能是因为第一个int之后的空间。在这里它说只有树格式说明符不会跳过空白。Whitespace before %c specification in the format specifier of scanf function in C我搞错了吗,为什么-
在这里不跳过前导空格,这是什么实际问题,是什么原因,为什么呢? 8,还有哪些其他运算符或字符会导致类似的问题?
让我们详细了解scanf
格式说明符"%d-%d"
:
%d
如有必要,请跳过空格,然后读取整数-
匹配文字'-'
字符%d
如有必要,请跳过空格,然后读取整数所以输入5-3
和5- 3
都可以正常工作。但是,当输入为5 -3
(或其他任何在-
之前有空格的内容)时,解析将失败,因为scanf
不会立即看到它期望的-
。
[如果不是您所期望的,或者不是您想要的,或者那没有道理,或者如果那不是您希望scanf
起作用的方式,恐怕太糟糕了:scanf
以其工作方式运行。
您如何解决此问题?这部分取决于您为什么首先在格式字符串中包含-
字符。