0

プログラマーの皆さん、こんにちは。

お願いしたいことがありますが、

大学から 10 進数 (0-9) を 1/2 ビット (ニブル = 0101 など) に変換するタスクがありました。if ステートメントを使用できないという制限があります。

だから私は少し試してみて、ここまで来ました

int main()
{
    int n;

    printf("type in your digit");
    scanf("%d", &n );
    printf("%n%n%n%n", (n/8)%2, (n/4)%2, (n/2)%2, n%2);

    return 0;
}

ここでの問題は、数字を入力するとプログラムがクラッシュすることです。

私は本当に苦労していて、続行する方法や機能させる方法がわかりません

それがどのように機能するかの例や、それを機能させるための良いアドバイスを教えてください。

とても感謝しております

助けと答えを本当にありがとう!

4

1 に答える 1

0

に間違った書式指定子を使用していますprintf

%nフォーマット指定子は を期待し、これまでに書き込まれた文字数を指定されたint *メモリ アドレスに書き込みます。intを期待する引数にを渡すためint *printfはその数値をメモリ アドレスとして解釈し、それに書き込もうとします。これは未定義の動作であり、コア ダンプが発生する可能性が高くなります。

%d代わりに使用したい場合は、次を出力するために使用されintます。

printf("%d%d%d%d", (n/8)%2, (n/4)%2, (n/2)%2, n%2);
于 2016-04-26T21:01:38.137 に答える