相关疑难解决方法(0)

%%是否应跳过scanf中的前导空格?

根据fscanfC17 7.21.6.2/8中的规范:

输入的空白字符(由指定的isspace功能)被跳过,除非本说明书包括一个[,cn

如果格式字符串包含%%,则它是具有说明%符的规范.那不是[,c或者n,所以标准似乎说这里应该跳过前导空格.

我的问题是:这是正确的解释,还是标准中的缺陷?

我测试了两种不同的实现(mingw-w64与MSVCRT stdio,mingw-w64与MinGW stdio).前者没有跳过领先的空白,后者则没有.

测试代码:

#include <stdio.h>

int main(void)
{
    int a, r;

    // Should be 1 according to standard; would be 0 if %% does not skip whitespace
    r = sscanf("x %1", "x%% %d", &a);
    printf("%d\n", r);

    // Should always be 1
    r = sscanf("x%1", "x%% %d", &a);
    printf("%d\n", r);
}
Run Code Online (Sandbox Code Playgroud)

c scanf language-lawyer

4
推荐指数
1
解决办法
114
查看次数

标签 统计

c ×1

language-lawyer ×1

scanf ×1