使用scanf()读取 循环?

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

我必须使用 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;
}
c scanf
1个回答
0
投票

在 Linux 上,标准输入默认是行缓冲的,因此

scanf()
不会获得任何输入,直到用户使用
\n
完成一行或收到您使用 Ctrl-D 生成的一次或两次 EOF。

格式字符串

%x
将跳过任何前导空格,并在 64 位系统上接受 1 到 8 位数字。 如果您需要严格解析输入,则需要查看每个字符。 您必须决定如何处理无效输入。 例如,一种选择是读取最多 5 * 3 = 15 字节的字符串并忽略后面的任何内容。 另一种选择是一次 1 个字节,然后确定它是否有效,如果是 16 个字节,则可能整个内容都是无效的。

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