【问题标题】:Using a DEFINITION in a scanf in C (type specifier) [duplicate]在 C 中的 scanf 中使用定义(类型说明符)[重复]
【发布时间】:2014-01-21 15:35:32
【问题描述】:

所以我原来的代码是:

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

如果我想让我的代码更灵活,我可以这样做,或者有类似的方法:

.#define MAX_NAME_IN 20
...
scanf("%MAX_NAME_INs %MAX_NAME_INs", Player1.name, Player2.name);
...

【问题讨论】:

标签: c visual-studio-2010 scanf c-preprocessor


【解决方案1】:
#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);

用这样的预处理器替换

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);

并且"%" "20" "s %" "20" "s" 被编译器解释为"%20s %20s"

【讨论】:

  • 太棒了,你能解释一下这是如何工作的吗?
  • 为什么你不能做#define MAX_NAME_IN 20 #define S(x) #x?
  • @Theo 你的case转换如下:S(MAX_NAME_IN) => "MAX_NAME_IN"
猜你喜欢
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多