4

私は1998年から21世紀までの古いコードの導入に取り組んでいます。プロセスの最初のステップの1つは、printfステートメントをQString変数に変換することです。何度もprintfを振り返っても、いつも忘れてしまいます。それで、楽しみのために、それを一緒にデコードしてみましょう。昔のために、そしてその過程で、Stackoverflowの最初の小さな「printfプライマー」を作成します。

コードの中で、私はこの小さな宝石に出くわしました、

printf("%4u\t%016.1f\t%04X\t%02X\t%1c\t%1c\t%4s", a, b, c, d, e, f, g);

変数a、b、c、d、e、f、gはどのようにフォーマットされますか?

4

6 に答える 6

5

ダニーはほとんど正しいです。

a。符号なし10進数、最小4文字、スペースが埋め込まれて
いるb。浮動小数点、小数点以下16桁(0が埋め込まれている)、小数点以下1桁
c。16進数、最小4文字、0が埋め込まれ、文字は大文字で印刷され
ますd。上記と同じですが、最低2文字
e。eはintであると見なされ、unsigned charに変換され、
fが出力されます。
たとえばと同じ これはタイプミスの可能性があり、4は効果がありません。「%.4s」の場合、文字列から最大4文字が出力されます。この場合、文字列をnullで終了する必要がないことに注意してください。

編集:jj33は、上記のbとgの2つのエラーを指摘しています

于 2008-08-11T18:11:45.697 に答える
5

@ Jason Day、4文字未満の場合、最後の%4の4は重要だと思います。正しいのが4つを超える場合、%4sと%sは同じになりますが、gの%sが4文字未満の場合は左揃えになり、%4sは4文字のフィールドで右揃えになります。

bは、実際には、小数点と小数点以下の1桁を含め、フィールド全体で最小16文字です(合計16文字と合計18文字)

于 2008-08-11T18:19:57.943 に答える
4

これが私のprintf入門書です: http://www.pixelbeat.org/programming/gcc/format_specs.html

私は常に -Wall with gcc でコンパイルします。これは、提供された printf フォーマットと変数の間の不一致について警告します。

于 2008-09-18T00:24:53.160 に答える
3

@ jj33、あなたは両方の点で絶対に正しいです。

#include <stdio.h>

int main(int argc, char *argv[]) {
    char *s = "Hello, World";
    char *s2 = "he";

    printf("4s: '%4s'\n", s);
    printf(".4s: '%.4s'\n", s);
    printf("4s2: '%4s'\n", s2);
    printf(".4s2: '%.4s'\n", s2);

    return 0;
}

$ gcc -o foo foo.c
$ ./foo
4s: 'Hello, World'
.4s: 'Hell'
4s2: '  he'
.4s2: 'he'

いいキャッチ!

于 2008-08-11T18:38:58.233 に答える
0

a。10進数、有効数字4桁

b。わからない

c。16進数、最小4文字

d。また、16進数、最低2文字

e。1文字

f。文字列、最小4

于 2008-08-11T17:33:50.843 に答える
0

本当に必要なのは、printf() ステートメントでフォーマット文字列を取得し、それらを同等の QString ベースの関数呼び出しに変換するツールです。
このようなツールの開発にフリー ソフトウェア寄付の時間を費やしたい人はいますか?

そのようなツールのソース コードを保持するフリー ソフトウェア ホスティング サービスへの URL のプレースホルダー

于 2008-09-20T19:25:49.987 に答える