我不知道该如何用语言解释,所以我先给你一个问题。因此,如果您之前有相同的问题,请原谅我。
#include <stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d %d", a, b);
return 0;
}
#include <stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d %d", a, b);
return 0;
}
我一直想知道在编码时scanf("%d %d", &a, &b);
和scanf("%d%d", &a, &b);
的区别。所以我的问题是,这两个代码在功能上是否相同?
答案 0 :(得分:2)
两个代码段之间没有没有区别。无论哪种方法都可以,您可以使用自己喜欢的任何一种。
但是,如果考虑%c,即char数据类型说明符,那么事情会变得很有趣。为了了解差异,请考虑以下程序:
int main()
{
char x,y; //declaring two variable of char data type
printf("Part 1");
scanf("%c%c",&x,&y); //no space between the specifiers
printf("%c %c",x,y);
printf("Part 2");
scanf("%c %c",&x,&y); //single white space between the specifiers.
printf("%c %c",x,y);
return 0;
}
在第1部分中,变量x存储字符“ A”,变量y存储字符“”(空格)。在这种情况下,该空间被视为输入,因此实际输入被忽略。 在第2部分中,变量x存储“ A”,而变量y存储“ B”,因为明确提到了输入中应包含空格。
希望这会有所帮助:)
答案 1 :(得分:1)
它们完全相同。
许多格式说明符占用前导空白。 d
是其中之一。格式字符串中的空格字符是使用空白的显式请求。仅在不占用空白的格式说明符-c
,[
和n
之前需要它们。
是否包含空格字符是样式问题。
标准参考:N1570 7.21.6.2/5 The fscanf
function:
由空格字符组成的指令由以下命令执行 读取输入内容,直到第一个非空白字符(仍保留 未读),或者直到无法读取更多字符为止。指令 永远不会失败。
输入空格字符(由
isspace
函数指定) 除非规范包含[
,c
或n
,否则将跳过 说明符。 284)284)这些空格字符不计入 指定的字段宽度。
7.21.6.4/2 The scanf
function:
scanf
函数等效于fscanf
,带有参数stdin
插入scanf
的参数之前。