2011-02-02 14 views
5

Zastanawiam się, czy moglibyśmy drukować od prawej do lewej, od dołu do góry ... Mam taką myśl, gdy próbuję napisać program, aby wydrukować następujący kwadrat (dla danych wejściowych "n", tutaj n = 4)Czy jest jakiś znak (naprzeciwko znaku nowej linii)?

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

Można to rozwiązać na wiele sposobów, zapisując w tablicy 2D i drukując tablicę ... (Dowolny język: Perl, C, C++, Java).

+0

Czy jest jakiś powód, dla którego nie można przejść od lewej do prawej, od góry do dołu? Mam kod, który wykonuje drukowanie kolumnowe (robisz row-major), co jest całkiem przydatne. Pomyśl o normalnym wyjściu 'ls-C', który jest kolumną-główną. – tchrist

+0

Słyszałem, że taka sekwencja znaków żartobliwie nazywa się "line glówną" jako przypuszczalną odwrotność linii. Zależy to jednak od terminala. http://foldoc.org/line+starve –

Odpowiedz

1

Baiscly to jest możliwe. Ale nie w tradycyjnym terminalu opartym na linii. Podczas uzyskiwania dostępu do ekranu bazującego na pikselach, dość łatwo jest rozwiązać ten problem. Przynajmniej nie ma prawdziwego odpowiednika dla \ n zdefiniowanego w ASCII.

A może to można zarchiwizować zmieniając metodę wprowadzania terminala na kulturę, która czyta od lewej do prawej i od dołu do góry.

7

Długą odpowiedzią jest to, że można zrobić wszystko, co obsługuje terminal. Istnieje wiele rodzajów terminali (lub "urządzeń wyjściowych znaków"), wiele z nich obsługuje ruchy kursora. (Możesz zobaczyć projekt Termcap Library, aby stworzyć obraz, jaki robią różne typy terminali.) Istnieje polecenie terminalu do przesunięcia w górę linii, więc tak naprawdę powinieneś być w stanie to zrobić. Po grzebie w termcap database, wpadłem z poniższych sytuacji:

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

Innymi słowy, ciąg \e[A ma niezerową szansę, aby dostać się jeden wiersz do góry. Na niektórych terminalach :)

+0

Znaleziono szybkie wyszukiwanie w CNAP [Term :: Cap] (http://search.cpan.org/~jstowe/Term-Cap-1.12/Cap.pm). Jednak tego nie używałem. – Dallaylaen

+0

Ah tak, w moim polowaniu na terminalu całkowicie zapomniałem, że rozwiązanie nie musi być prostym ciągiem znaków ucieczki. W takim przypadku na pewno jest wiele bibliotek, które wykonają pozycjonowanie kursora. – zoul

+0

"odwrócony kanał" to "\ eM" – o11c

Powiązane problemy