当我编写程序时,我不会注意scanf
的参数。
有什么区别:
scanf("%d %d", &x,&y);
和
scanf("%d%d", &x,&y);
注意%d
之间的空格。
我试过我的电脑,但我看不出其中的差别。
另外,%c
代替%d
-
scanf("%c %c", &x,&y);
和
scanf("%c%c", &x,&y);
你能给我一些有用的例子来理解这个愚蠢的事吗?
答案 0 :(得分:2)
在你的情况下,无论你是否在它们之间放置空格,它们都会产生相同的结果:)
来自cppreference:
在尝试解析输入之前,除[,c和n之外的所有转换说明符都会消耗并丢弃所有前导空白字符(通过调用isspace确定)。这些消耗的字符不计入指定的最大字段宽度。
不使用前导空格的转换说明符,例如%c,可以通过在格式字符串中使用空格字符来实现:
scanf("%d", &a);
scanf(" %c", &c); // ignore the endline after %d, then read a char
所以你的例子:scanf("%c%c", &x, &y);
不会跳过空白。
如果您输入a b
后输入,则会显示a
和空格
另一方面,如果您输入ab
,它将根据您的需要读取a和b。
在示例中:scanf("%c %c", &x, &y);
,如果您输入a
并按Enter键,它将忽略换行符,并让您输入另一个字符。
答案 1 :(得分:1)
scanf("%d %d", &x, &y)
将占用空间(如果有),然后读取第二个整数,而scanf("%d%d", &x, &y)
将在读取两个整数时忽略空格。但是,两者在运行时都会产生相同的结果。
答案 2 :(得分:1)
匹配空格的格式指令(例如isspace
返回true的任何内容)会导致从流中读取和丢弃尽可能多的空格(在本例中为stdin
)。
无论如何,在%d
格式指令翻译数字之前需要此过程;也就是说,%d
指令将读取并丢弃尽可能多的空格,然后读取并将符号和/或十进制数字序列转换为int
。
总之,无论有没有whitespace指令,这两个语句的功能都是相同的;在这种情况下,whitespace指令是多余的。