我试图通过
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
的用户输入。
在
scanf("%llu\n", &y);
中,%llu
告诉 scanf
匹配可选的有符号十进制整数并将其转换为 unsigned long long int
。然后 \n
告诉 scanf
“[读取]输入到第一个非空白字符(仍为未读),或者直到无法读取更多字符”(C 2018 7.21.6.1 5)。所以 scanf
从输入中读取。很可能,用户按下 Enter 或 Return,在输入流中生成换行符,然后 scanf
读取该字符。
但这不是非空白字符,因此
scanf
继续阅读。此时,终端处于待输入状态,等待用户输入内容。如果用户键入非空白字符,scanf
将看到该字符并完成格式的 \n
部分。否则,scanf
继续等待更多输入。
删除
\n
;将代码更改为scanf("%llu", &y);
。然后当它看到整数匹配完成时,scanf
将返回。