3

私はコードに出くわしました:

#include<stdio.h>
int main(){
    int n=5;
    printf("\nn=%*d",n,n);
    return 0;
}

出力: n= 5. %*d2 つのパラメーターを許可し、フィールド幅を返すことを知っています。ただし、nの値を に変更してみました9。しかし、出力は同じ形式 (つまりn= 9) でした。%*dまた、フィールド幅を正しく理解しているかどうかも 100% 確信が持てません。

したがって、私の質問は%*d、Cのフィールド幅とは何ですか.

ありがとう。

編集:

わかりました、みんなありがとう。スペースを 1 つに結合していたのは私のコンパイラであることがわかりました。

4

4 に答える 4

2

長さ n の n を出力します

printf("\nn=%*d",n,n);

星は次の略です。

幅はフォーマット文字列では指定されませんが、フォーマットする必要がある引数の前に追加の整数値引数として指定されます。

ソース: http://www.cplusplus.com/reference/cstdio/printf/

于 2013-11-21T10:46:30.743 に答える
2

たとえば、この参照を読むと、次のことがわかります

最小フィールド幅を指定する整数値または *。結果は、必要に応じてスペース文字 (デフォルト) でパディングされ、右寄せの場合は左に、左寄せの場合は右にパディングされます。* を使用する場合、幅は int 型の追加引数によって指定されます。引数の値が負の場合、- フラグが指定され、フィールド幅が正になります。

したがって、アスタリスクはprintf引数からフィールド幅を取得するように指示します。nはあなたの例にあるため5、出力は 4 つのスペースと数字5になり、幅は合計 5 文字になります。

オンライン コンパイラでこれを行う場合、Web ブラウザは、たとえば<pre>ブロック内または非改行スペース ( など&nbsp;) でない限り、テキスト内のすべてのスペースを表示しないことに注意してください。

自分のコンピューターのテキストコンソールでこれを行うか、出力を適切にフォーマットする別のオンラインコンパイラーを試すことをお勧めします。

于 2013-11-21T10:47:07.010 に答える
1

9 を使用:

n=        9Press any key to continue...

5を使用:

n=    5Press any key to continue...

そのオンライン コンパイラは、明らかにすべてのスペースを 1 つに結合します。

より良いものを使用する:

5: http://ideone.com/WMrki5

9: http://ideone.com/E1lGj7

于 2013-11-21T10:47:14.593 に答える