2011-02-02 11 views
5

右から左へ、下から上へと印刷できるのだろうかと疑問に思っていました。次の四角形を入力するプログラムを作成しようとしたときに思いつきました(入力 'n'の場合はn = 4)改行の反対側にcharがありますか?

1 2 3 4 
12 13 14 5 
11 16 15 6 
10 9 8 7 

これは、2D配列に格納して配列を印刷することで、多くの方法で解決できます(任意の言語:Perl、C、C++、Java)。

+0

左から右、上から下に行くことができない何らかの理由はありますか?私は列の主要な印刷を行うコードを持っています(あなたは行メジャーを行います)。これは非常に便利です。コラムメジャーである 'ls -C'の通常の出力を考えてみましょう。 – tchrist

+0

私は、このような文字列が、冗談のように「ライン飢え」と呼ばれていると聞いています。それは間違いなくターミナル依存です。 http://foldoc.org/line+starve –

答えて

1

これは可能です。しかし、従来の回線ベースの端末ではありません。スクリーンピクセルにアクセスすると、この問題を解決するのは簡単です。少なくとも、ASCIIで定義された\ nには対応していません。

これは、端末の入力方法を左から右、下から上に読んでいるカルチャに変更することでアーカイブできます。

7

長い答えは、端末がサポートしているすべてのことができることです。多くの種類の端末(または「文字出力デバイス」)があり、その多くはカーソルの動きをサポートしています。 (Termcap Libraryプロジェクトでは、さまざまな端末タイプの画像を作成することができます)。行を上に移動するための端末コマンドがあります。つまり、そうすることができます。 termcap databaseで突っついた後、私は、次のを思い付いた:

つまり
$ printf "\n"; printf '\e[A'; echo Foo 
Foo 

\e[A文字列はあなたに1つのラインアップを取得するための非ゼロのチャンスがあります。いくつかの端末で:

+0

クイックCNAP検索が見つかりました[Term :: Cap](http://search.cpan.org/~jstowe/Term-Cap-1.12/Cap.pm)。私はそれを使用していない。 – Dallaylaen

+0

ああ、私の端末狩りでは、解決策が単純なエスケープ文字列である必要はないことを完全に忘れてしまった。その場合は、あなたのためにカーソルの位置を決めるライブラリがたくさんあります。 – zoul

+0

"逆改行"は '\ eM'です – o11c

関連する問題