不知道scanf函数出了什么问题 [duplicate]

Don't know what's wrong with the scanf function [duplicate]

提问人:nmn 提问时间:11/1/2023 最后编辑:Mark Rotteveelnmn 更新时间:11/2/2023 访问量:80

问:

这个问题在这里已经有答案了:
22天前关闭。

这篇文章在 21 天前被编辑并提交审核,但未能重新打开帖子:

原始关闭原因未解决

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

#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 扫描

评论

4赞 dbush 11/1/2023
检查第二个 中的格式字符串。scanf
4赞 John Bollinger 11/1/2023
@TomKarzes,自动使用前导空格。问题在于第二种格式末尾的换行符。%u
0赞 Ted Lyngmo 11/1/2023
在最后一个 .来得及\nprintfprintf("y is %llu\n", y);
1赞 Weather Vane 11/1/2023
请参阅 scanf() 格式字符串中尾随空格的影响是什么?

答:

1赞 Eric Postpischil 11/1/2023 #1

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

但这不是一个非空白字符,所以继续阅读。此时,终端处于待处理状态,等待用户输入内容。如果用户键入非空格字符,将看到该字符并完成格式的一部分。否则,请继续等待更多输入。scanfscanf\nscanf

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

评论

0赞 Chris 11/1/2023
此外,请务必检查 的返回值。scanf