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.