Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用带有未知参数的“print”宏_C - Fatal编程技术网

C 如何使用带有未知参数的“print”宏

C 如何使用带有未知参数的“print”宏,c,C,这段代码不起作用,但当我使用print7时,它可以正常工作: #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 {

这段代码不起作用,但当我使用print7时,它可以正常工作:

#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
    {

    }
}
如何使代码适用于用户插入的输入。请帮助。

问题在于操作员是预处理器的一部分。它不理解运行时值

printf函数识别*语法,该语法告诉它接受指定字段宽度的int参数,而不是将宽度作为格式字符串中的常量

例如,此函数可以替换宏。请注意,我已将ch设置为参数;我认为那样更清楚

int print(int n, char ch) {
    return printf("%*c", n, ch);
}
就我个人而言,我可能不会为此而费心使用函数或宏;我直接打电话给printf:

printf("%*c", n, '*');

你为什么要用宏来做这个?我喜欢尝试我的想法。这次我想为用户输入的所有数字实现一个x。我的意思是*将被用户输入的数字向右移动。您知道宏替换甚至在真正编译之前就已经发生了吗?
printf("%*c", n, '*');