问如何在 scanf 格式字符串中指定变量宽度?scanf格式字符串?
答你不能;格式字符串中的星号 (*) 表示抑制赋值。你可以尝试使用 ANSI 字符串化和字符串连接,根据包含所需宽度的预处理器宏来构建一个常量格式说明符。scanf如果宽度是运行时变量,那么你也必须在运行时构建格式说明符。
#define WIDTH 3 #define Str(x) #x #define Xstr(x) Str(x) /* see question 11.17 */ scanf("%" Xstr(WIDTH) "d", &n);从标准输入读取时不太可能出现此类格式,但在使用 fscanf 或 sscanf 时可能有一些用处。
char fmt[10]; sprintf(fmt, "%%%dd", width); scanf(fmt, &n);(scanf格式,但可能与fscanf或sscanf.)