此代码不起作用,但是当我放置print(7)
时,这可以正常工作:
#include<stdio.h>
#define print(i) printf("%"#i"c",ch);
int main(void)
{
char ch ='*';
int N;
scanf("%d",&N);
if (N%2 == 0)
{
print(N); // print(7);
}
else
{
}
}
这是编译输出
gcc draw.c -o draw
draw.c: In function ‘main’:
draw.c:11: warning: unknown conversion type character ‘N’ in format
如何让代码适用于用户插入的输入。请帮忙。
答案 0 :(得分:3)
问题是#
运算符是预处理器的一部分。它不了解运行时值。
printf
函数识别*
语法,告诉它接受指定字段宽度的int
参数,而不是在格式字符串中将宽度作为常量。< / p>
例如,此函数可以替换您的宏。请注意,我已将ch
作为参数;我认为这样更清楚。
int print(int n, char ch) {
return printf("%*c", n, ch);
}
就个人而言,我可能不会为此功能或宏而烦恼;我只是直接致电printf
:
printf("%*c", n, '*');