不知道scanf函数有什么问题[重复]

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

我试图通过

scanf
函数从用户输入中获取 2 个整数,并使用
printf
打印出该输入。 不知何故,我无法打印出第二个整数。我在这里错过了什么?

#include <stdio.h>
#include <math.h>

int main (void)
{
    unsigned long long int x = 0, y = 0;
    printf("The first integer: ");
    scanf("%llu", &x);
    printf("x is %llu\n", x);
    printf("The second integer: ");
    scanf("%llu\n", &y);
    printf("y is %llu", y);
}

我尝试仅从

printf("The second integer: ")
运行代码,但程序无法按预期打印出
y
的用户输入。

c printf scanf
1个回答
1
投票

scanf("%llu\n", &y);
中,
%llu
告诉
scanf
匹配可选的有符号十进制整数并将其转换为
unsigned long long int
。然后
\n
告诉
scanf
“[读取]输入到第一个非空白字符(仍为未读),或者直到无法读取更多字符”(C 2018 7.21.6.1 5)。所以
scanf
从输入中读取。很可能,用户按下 EnterReturn,在输入流中生成换行符,然后
scanf
读取该字符。

但这不是非空白字符,因此

scanf
继续阅读。此时,终端处于待输入状态,等待用户输入内容。如果用户键入非空白字符,
scanf
将看到该字符并完成格式的
\n
部分。否则,
scanf
继续等待更多输入。

删除

\n
;将代码更改为
scanf("%llu", &y);
。然后当它看到整数匹配完成时,
scanf
将返回。

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