-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 に答える