prev up next   top/contents search

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.

prev up next   contents search
about this FAQ list   about eskimo   search   feedback   copyright

Hosted by Eskimo North