当我使用scanf()时,我想知道这两者有什么不同

时间:2019-08-02 03:57:22

标签: c

我不知道该如何用语言解释,所以我先给你一个问题。因此,如果您之前有相同的问题,请原谅我。

#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);的区别。所以我的问题是,这两个代码在功能上是否相同?

2 个答案:

答案 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;
    }

程序执行时的屏幕截图 enter image description here

在第1部分中,变量x存储字符“ A”,变量y存储字符“”(空格)。在这种情况下,该空间被视为输入,因此实际输入被忽略。 在第2部分中,变量x存储“ A”,而变量y存储“ B”,因为明确提到了输入中应包含空格。

希望这会有所帮助:)

答案 1 :(得分:1)

它们完全相同。

许多格式说明符占用前导空白。 d是其中之一。格式字符串中的空格字符是使用空白的显式请求。仅在不占用空白的格式说明符-c[n之前需要它们。

是否包含空格字符是样式问题。


标准参考:N1570 7.21.6.2/5 The fscanf function

  

由空格字符组成的指令由以下命令执行   读取输入内容,直到第一个非空白字符(仍保留   未读),或者直到无法读取更多字符为止。指令   永远不会失败。

7.21.6.2/8

  

输入空格字符(由isspace函数指定)   除非规范包含[cn,否则将跳过   说明符。 284)

     

284)这些空格字符不计入   指定的字段宽度。

7.21.6.4/2 The scanf function

  

scanf函数等效于fscanf,带有参数   stdin插入scanf的参数之前。