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

Rob*_*nie 2 c stdio

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

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

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

Som*_*ude 7

如果你想scanf(等)只读两个字符,那么告诉它这样做:

scanf("%2x", &r);
Run Code Online (Sandbox Code Playgroud)

有关格式化的信息,请参阅此参考scanf.