-1

这段代码不起作用,但当我把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

如何让代码适用于用户插入的输入。请帮忙。

4

1 回答 1

3

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

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

例如,此函数可以替换您的宏。请注意,我已经制作ch了一个参数;我认为这样更清楚。

int print(int n, char ch) {
    return printf("%*c", n, ch);
}

就个人而言,我可能不会为此使用函数或宏。我printf直接打电话:

printf("%*c", n, '*');
于 2012-07-13T21:34:20.703 回答