Tuesday, November 9, 2010

Question 12.15

comp.lang.c FAQ list · Question 12.15

Q: How can I specify a variable width in a scanf format string?


A: You can't; an asterisk in a scanf format string means to suppress assignment. You may be able to use ANSI stringizing and string concatenation to construct a constant format specifier based on a preprocessor macro containing the desired width:
#define WIDTH 3

#define Str(x) #x
#define Xstr(x) Str(x) /* see question 11.17 */

scanf("%" Xstr(WIDTH) "d", &n);
If the width is a run-time variable, though, you'll have to build the format specifier at run time, too:
char fmt[10];
sprintf(fmt, "%%%dd", width);
scanf(fmt, &n);
(scanf formats like these are unlikely when reading from standard input, but might find some usefulness with fscanf or sscanf.)
See also questions 11.17 and 12.10.

No comments:

Post a Comment