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

AltStyle によって変換されたページ (->オリジナル) /