ほとんどのターミナル プログラムでは、8 列ごとにタブ ストップが設定されます。そのため、出力は次のように決定されると予想されます (出力が少し異なることはわかっています。以下で説明します)。
. column
. 1 2
input 12345678901234567890
"%d",printf("hello%d\t" hello2__7
"%d",printf("hello\t%d" hello___27
"%d",printf("\thello%d" ________hello27
これを理解するには、(不必要に複雑な) コードの評価の順序を理解する必要があります。最初の行を調べていprintf
ます...
printf("%d",printf("hello%d\t",scanf("%d%d",&a,&b)));
上記では、左側への引数は、それ自体を出力する前に準備する必要があり、それらの引数には右側を呼び出した結果が含まれます。その右側の出力は、標準入力から読み取られた引数の数です。これは、2 を入力した場合は 2 であり、次にタブを入力すると、右側は出力を終了し、印刷された文字数を示すために「7」を返します。左手で。タブで画面の 9 列目に移動すると予想されますが、これは 7 の前に 2 つのスペースがあることを示唆していますが、あなたの質問によると、1 を観察しているとのことです。 24 桁目などはタブ ストップになります。 printf
printf
printf
hello
scanf
printf
printf
タブの詳細
TAB 文字の普遍的な解釈はありません\t
...どのようにレンダリングされるかは、使用しているターミナル ソフトウェアまたはレンダリング デバイス (xterm、vt220、vt100 ターミナル、MS-DOS コマンド ウィンドウ、プリンター、IDE、テキスト エディターなど) によって異なります。 .)。
一部の表示/印刷/フォーマット プログラムでは、N 文字ごとにタブ ストップがあると見なされます (N は多くの場合 8 です)。そのため、最初の列から 8 番目の列までタブを発行すると、9 番目の列に移動します。 9 列目から 16 列目までのタブは、17 列目などに移動します。しかし、多くのプログラムには、タブ配置のために任意の列を設定する方法があります。MS Word などの一部のプログラムでは、タブ ストップ間の文字数が変化する可変幅フォントを使用できます。Word にインポートしたテキストを C++ プログラムで印刷すると、取得するのに必要なタブ数を計算することが事実上不可能になる場合があります。出力の目的の配置 - 通常は、値の間に 1 つのタブを配置し、Word 内でタブ ストップを変更してすべてが適切に見えるようにするか、Courier などの固定幅フォントを使用する方が簡単です。
C++ IDE では、多くの場合、タブ位置ごとに列の値 (上記の「N」) を設定できます。4 と 8 はどちらも一般的な設定です。多くの場合、8 は、ソース コードのインデントがタブとスペースを組み合わせて目的の左側に到達することを意味します。 -column: 単純なカーソル移動の実装でナビゲートするのはちょっと厄介です。多くの人は、「タブが押されたときにスペースを挿入する」オプションを設定することを好みます。これにより、ファイルは常に実際のスペースで保存され、さまざまな表示/印刷ソフトウェアでより予測どおりに表示されます。