prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 12.15

如何在 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格式,但可能与fscanfsscanf.)

参见问题 11.1712.10


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管