如果用户输入0x,则使用%8x auto的scanf会在开头添加00?

时间:2018-04-16 05:45:53

标签: c

我有点坚持如何使它工作,我需要从用户获得8位十六进制数字。我试图只获得前8位数,如果用户输入超过8位

scanf("%8x", iPtr); //iPtr is an int pointer that's why i don't use &.

如果用户未在开头键入:0x,但如果他们输入:0xffffffffffff,则此功能正常 iPtr的结果是:0x00FFFFFF 它会在0 s ...

前面自动添加2 F

如果我只使用%x,它会正常工作,但会获得最后8位数字。我想要前8位......

1 个答案:

答案 0 :(得分:2)

格式字符串中的8表示从输入中读取最多8个字符。因此,如果输入为0xffffffffff,则输入序列为0xffffff,与您获得的输出相匹配。 (我假设您在printf格式字符串中使用了%08x,否则您将在输出中看不到额外的零。

不幸的是,没有scanf选项的组合意味着“如果以0x0X开头,则读取10个字符,否则读取8个字符”。您必须使用其他输入函数自己实现该逻辑。