我必须使用 scanf() 来读取每个 2 位十六进制值。每2位数字 十六进制数将由一个空格和一个“分隔” ’ 的性格(而不是 而非数字后的空格)将表明消息已完成。您的程序应该扫描每个值,直到您读入最大数量的输入或到达行尾。最大输入数量为 5。
例如,有效输入可能是:00 4A 12 BB 43 88
另一个有效输入为:AA BB 33 12( )
如果我的输入数量大于或等于 MAX_CHAR_LENGTH,它将正常工作。然而,当输入数量小于这个值时,它似乎无法工作。有没有办法检测 curr_hex 是否 或者不这样我就可以突破?
这就是我的程序
#include <stdio.h>
#define MAX_CHAR_LENGTH 5
int main() {
unsigned int curr_hex;
printf("enter hex values: " ); // prompt user to enter hex values
for (int i = 0; i < MAX_CHAR_LENGTH && !(curr_hex == '\n'); i++) {
scanf("%x", &curr_hex);
printf("Read hex: 0x%02X\n", curr_hex);
}
return 0;
}
在 Linux 上,标准输入默认是行缓冲的,因此
scanf()
不会获得任何输入,直到用户使用 \n
完成一行或收到您使用 Ctrl-D 生成的一次或两次 EOF。
格式字符串
%x
将跳过任何前导空格,并在 64 位系统上接受 1 到 8 位数字。 如果您需要严格解析输入,则需要查看每个字符。 您必须决定如何处理无效输入。 例如,一种选择是读取最多 5 * 3 = 15 字节的字符串并忽略后面的任何内容。 另一种选择是一次 1 个字节,然后确定它是否有效,如果是 16 个字节,则可能整个内容都是无效的。