[解決済み] ⑭と⑯は何のためにあるのですか?
質問
私はこの単純なコードの行を期待しています
printf("foo\b\tbar\n");
を "o" と "\t" に置き換えて、次のように出力します。
fo bar
(8文字ごとにタブストップが発生すると仮定して)。 逆に
foo bar
私のシェルでは、♪ \b は "カーソルを1つ後ろに移動" 、♪ \t は "カーソルを次のタブストップに移動" と解釈しているようです。この動作は、私がコードを実行しているシェルに特有のものなのでしょうか?異なるシステムで異なる動作を期待すべきでしょうか?
解決方法は?
BackspaceとTabはどちらもカーソル位置の移動です。 どちらも本当の意味で「印刷可能」な文字ではありません。
あなたのコードによると
- print "foo"
- カーソルを1スペース戻す
- カーソルを次のタブストップに移動させる
- bar"を出力します。
期待する出力を得るためには
printf("foo\b \tbar")
. 余分な'スペース'に注意してください。 と書いてある。
- foo"を出力します。
- カーソルを1スペース戻す
- を出力する(これは2番目の'o'を置き換えます)。
- カーソルを次のタブストップに移動させる
- bar"を出力します。
ほとんどの場合、プログラムの出力の書式設定にタブやバックスペースを使用することは不適切です。 次のような使い方を覚えてください。
printf()
書式指定子 タブのレンダリングは、出力の表示方法によって大きく変わる可能性があります。
この小さなスクリプトは、ターミナルのタブ描画を変更する方法の一つを示します。 Ubuntu + gnome-terminalでテストしています。
#!/bin/bash
tabs -8
echo -e "\tnormal tabstop"
for x in `seq 2 10`; do
tabs $x
echo -e "\ttabstop=$x"
done
tabs -8
echo -e "\tnormal tabstop"
も参照してください。
man setterm
と
regtabs
.
また、出力をリダイレクトしたり、ファイルに書き出したりすると、特にプログラミングエディターやIDEでは、タブが標準の8文字より少なく表示されることがよくあります。
つまりは
printf("%-8s%s", "foo", "bar"); /* this will ALWAYS output "foo bar" */
printf("foo\tbar"); /* who knows how this will be rendered */
IMHOでは、一般的にタブが何かに適していることはほとんどありません。 例外は、タブで区切られた値の入力ファイルを必要とするプログラムの出力を生成することかもしれません(カンマで区切られた値と似ています)。
バックスペース
'\b'
テキストエディタがゴミを吐き出すだけなので、テキストファイルの作成に使ってはいけません。 しかし、フォーマット文字列だけでは実現できないような対話的なコマンドライン・プログラムを書く際には、多くの用途があります。 もし、これを頻繁に使うようであれば、"ncurses" をチェックしてください。これは、ターミナル画面のどこに出力するかをより良く制御することができます。 そして一般的に、今は1995年ではなく2011年なので、高度にインタラクティブなプログラムには通常GUIが扱いやすいのです。 しかし、やはり例外はあります。telnetサーバーや新しいスクリプト言語用のコンソールを書くような場合です。
関連
-
C 構造体定義エラー: '['トークンの前に一次式があることが予想される
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] longをフォーマットするprintfの引数は何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
C 構造体定義エラー: '['トークンの前に一次式があることが予想される
-
構造体の配列--[エラー] '['トークンの前に一次式があることが予想される
-
error: '.' トークンの前にunqualified-idを指定する必要があります。
-
[解決済み] Valgrind が初期化されていないバイトについて警告する
-
[解決済み] Code::Blocks アプリケーションをコンパイルできない
-
[解決済み] Cコードの単体テスト【終了しました
-
[解決済み] C言語でランダムなint型を生成するには?
-
[解決済み] C 言語の配列へのポインタ/ポインタの配列の曖昧さ解消
-
[解決済み] 講師が書いたC言語のファイルは、なぜ最初の行に#が一つ付いているのですか?