我该如何限制fscanf解释的字符数?

时间:2013-07-23 08:16:17

标签: c stdio

我正在编写一个程序来从stdin读取,然后将其读取的内容写入stdout,取消它找到的任何转义的十六进制数字。我想读的所有数字都是8位。这就是我到目前为止所拥有的

while((c = fgetc(stdin)) != EOF) {
    if(c == '%') {
        fscanf(stdin,"%x",&r);
        printf("%i \n",r);
    }
}

这样可以正常工作,除了当我向标准输入写%FFF之类的内容时,它将其读取为3位十六进制数。我应该如何限制fscanf只读2个字符?我曾考虑将接下来的2个字符读入缓冲区sscanf'ing,但这对我来说感觉相当不优雅。

1 个答案:

答案 0 :(得分:7)

如果您希望scanf(等)只读取两个字符,请告诉它:

scanf("%2x", &r);

参见例如有关scanf格式的信息,请this reference