【发布时间】:2016-04-10 15:47:53
【问题描述】:
我正在尝试使用scanf() 读取带有%hhu 的无符号字符值,但编译器返回给我:
error: unknown conversion type character 'h' in format
[-Werror=format]| // line 3 error: too many arguments for format
[-Werror=format-extra-args]| // line 3
使用以下代码:
printf("Enter a number: ");
unsigned char nb;
scanf("%hhu", &nb); // line 3
printf("Number: %u\n", nb);
return (nb);
【问题讨论】:
-
您正在使用代码块或其他不遵守
h格式类型修饰符的编译器。只需将所有内容更改为%u并使用unsigned int。如果您需要阅读byte,请使用char。 -
尝试在文件顶部添加
#define __USE_MINGW_ANSI_STDIO 1或将-D__USE_MINGW_ANSI_STDIO=1添加到您的预处理器(或编译器)标志。根据您提供的诊断输出,您似乎正在使用 MinGW 编译器。另见this related topic。 -
将 -std=c99 添加到编译器选项?只是猜测。
-
@DavidC.Rankin Code::Blocks 是 IDE,而不是编译器。它(IIRC)使用 GCC 作为编译器。
-
作为一般说明,除非您需要读取 byte,否则请在代码中使用本机类型
int或unsigned。它会更快,因为编译器不需要进行从int到char的类型转换等。如果您需要将读取限制为一个字节,请使用%cfor char。长度修饰符h很好,但并非所有编译器都实现。我以前也被这个咬过。