1

So my original code was:

scanf("%20s %20s", Player1.name, Player2.name);

If I want to make my code more flexible can I do, or is there a similar way to do:

.#define MAX_NAME_IN 20
...
scanf("%MAX_NAME_INs %MAX_NAME_INs", Player1.name, Player2.name);
...
Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
Theo
  • 35
  • 1
  • 1
  • 6

1 Answers1

2
#define MAX_NAME_IN 20
#define S_(x) #x
#define S(x) S_(x)
...
scanf("%" S(MAX_NAME_IN) "s %" S(MAX_NAME_IN) "s", Player1.name, Player2.name);

replace by preprocessor like this

S(MAX_NAME_IN) => S_(20) => "20"

scanf("%" S(MAX_NAME_IN) "s %" S(MAX_NAME_IN) "s", Player1.name, Player2.name);
↓
scanf("%" "20" "s %" "20" "s", Player1.name, Player2.name);

and "%" "20" "s %" "20" "s" is interpreted as "%20s %20s" by compiler.

BLUEPIXY
  • 39,699
  • 7
  • 33
  • 70