331

ý nghĩa của các ký tự điều khiển sau là gì:Trả lại vận chuyển, nguồn cấp dữ liệu dòng và nguồn cấp dữ liệu biểu mẫu là gì?

  1. Vận chuyển trở lại

  2. thức ăn đường

  3. thức ăn Mẫu

+6

"Trả lại hàng" nghĩa là gì? Tôi không thấy bất kỳ "vận chuyển" nào "trở về" trên máy tính xách tay của tôi. : s –

+2

@JeanHominal vận chuyển về cơ bản có nghĩa là con trỏ (hoặc con trỏ trong máy chữ cổ), và trở về có nghĩa là để trở về đầu dòng đó. – SOFe

Trả lời

21

Có một cái nhìn tại Wikipedia:

Các hệ thống dựa trên ASCII hoặc bộ ký tự tương thích sử dụng LF (Nguồn cấp dữ liệu dòng, '\ n', 0x0A, 10 thập phân) hoặc CR (Vận chuyển trở lại, '\ r', 0x0D, 13 thập phân) riêng lẻ hoặc CR theo sau là LF (CR + LF, 0x0D 0x0A). Các ký tự này dựa trên các lệnh của máy in: Nguồn cấp dữ liệu dòng chỉ ra rằng một dòng giấy sẽ được lấy ra khỏi máy in và một dấu xuống dòng cho biết rằng vận chuyển máy in sẽ trở về đầu dòng hiện tại.

2

"\ n" là ký tự linefeed. Nó có nghĩa là kết thúc dòng hiện tại và đi đến một dòng mới cho bất cứ ai đang đọc nó.

12

Trên thiết bị đầu cuối máy in giấy cũ, chuyển sang dòng tiếp theo liên quan đến hai thao tác: di chuyển đầu in trở lại đầu phạm vi quét ngang (tốc độ truyền) và tiến hành cuộn giấy được in trên (nguồn cấp dữ liệu dòng) .

Vì chúng tôi không còn sử dụng các đầu cuối của máy in giấy nữa, những hành động đó không thực sự có liên quan nữa, nhưng các ký tự được sử dụng để báo hiệu chúng đã bị kẹt xung quanh trong nhiều hóa thân khác nhau.

+0

Trên thực tế 'vận chuyển trở lại' không di chuyển đầu in sang trái, nhưng di chuyển vận chuyển giữ trục lăn ở bên phải. Đã từng là đòn bẩy dài được bàn tay trái kích hoạt để làm điều này. Xem http://en.wikipedia.org/wiki/Typewriter –

+2

@MarkLakata Đúng đối với máy chữ, nhưng câu trả lời này là về thiết bị đầu cuối in cũ. Ví dụ: DEC LA36 (http://www.columbia.edu/cu/computinghistory/la36.html). –

0

Đó là các ký tự không in, liên quan đến khái niệm "dòng mới". \ n là linefeed. \ r là vận chuyển trở lại. Trên các nền tảng khác nhau, chúng có ý nghĩa khác nhau, liên quan đến một dòng mới hợp lệ. Trong cửa sổ, một dòng mới là \ r \ n. Trong linux, \ n. Trong mac, \ r.

Trong thực tế, bạn đặt chúng vào bất kỳ chuỗi nào và nó sẽ có tác dụng trên bản in ra của chuỗi.

463

Phương tiện vận chuyển có nghĩa là quay lại đầu dòng hiện tại mà không cần tiến xuống dưới. Tên đến từ một chiếc xe ngựa của máy in, vì màn hình rất hiếm khi tên được đặt ra. Điều này thường được thoát như "\ r", viết tắt CR và có giá trị ASCII 13 hoặc 0x0D.

Nguồn cấp dữ liệu có nghĩa là chuyển xuống dòng tiếp theo; tuy nhiên, nó đã được sửa lại và đổi tên. Được sử dụng làm "dòng mới", nó chấm dứt các dòng (thường bị nhầm lẫn với tách dòng). Điều này thường được thoát như "\ n", viết tắt là LF hoặc NL, và có giá trị ASCII 10 hoặc 0x0A. CRLF (nhưng không phải CRNL) được sử dụng cho cặp "\ r \ n".

Nguồn cấp dữ liệu mẫu có nghĩa là tiến xuống tới "trang" tiếp theo. Nó thường được sử dụng như phân cách trang, nhưng bây giờ cũng được sử dụng như phân cách phần. (Nó được sử dụng phổ biến trong mã nguồn để phân chia các chức năng hoặc nhóm chức năng độc lập một cách hợp lý.) Trình soạn thảo văn bản có thể sử dụng ký tự này khi bạn "chèn ngắt trang". Điều này thường được thoát như "\ f", viết tắt là FF và có giá trị ASCII 12 hoặc 0x0C.

Là ký tự điều khiển, chúng có thể được diễn giải theo nhiều cách khác nhau.

Sự khác biệt phổ biến nhất (và có lẽ là điều duy nhất đáng lo ngại) là các dòng kết thúc bằng CRLF trên Windows, NL trên Unix, và CR trên các máy Mac cũ hơn (tình huống đã thay đổi với OS X giống Unix) . Lưu ý sự dịch chuyển ý nghĩa từ LF sang NL, với cùng một ký tự, cho sự khác biệt giữa Windows và Unix. (Windows là, tất nhiên, mới hơn Unix, do đó, nó đã không áp dụng sự thay đổi ngữ nghĩa này. Tôi không biết lịch sử của máy Mac sử dụng CR.) Nhiều trình soạn thảo văn bản có thể đọc các tệp ở bất kỳ định dạng nào trong số ba định dạng này và chuyển đổi giữa chúng , nhưng không phải tất cả các tiện ích đều có thể.

Nguồn cấp dữ liệu mẫu thú vị hơn một chút (mặc dù ít được sử dụng trực tiếp hơn) và với định nghĩa thông thường của dấu phân cách trang, nó chỉ có thể nằm giữa các dòng (ví dụ: sau chuỗi mới của NL, CRLF hoặc CR) hoặc ở đầu hoặc cuối tệp.

+8

Tôi có thể xác nhận rằng [OS X] (http://en.wikipedia.org/wiki/OS_X) sử dụng NL làm trình kết thúc dòng, giống như Unix (vì OS X * là * Unix). CR được sử dụng trong [Mac OS 9] (http://en.wikipedia.org/wiki/Mac_OS_9) và dưới đây. –

+1

Các FF char có thể có vẻ lạ ngày nay (cùng với "CTRL-G" chuông char) nhưng nó có sự liên quan nhiều hơn khi video hiển thị ít phổ biến hơn và bản sao cứng thiết bị đầu cuối được sử dụng như dữ liệu hiển thị. –

+0

Không phải là điều khiển nguồn cấp dữ liệu đó '\ x0c'? – Tjorriemorrie

25

\f được sử dụng để ngắt trang. Bạn không thể thấy bất kỳ hiệu ứng nào trong bảng điều khiển. Nhưng khi bạn sử dụng hằng số ký tự này trong tệp của bạn thì bạn có thể thấy sự khác biệt.

Ví dụ khác là nếu bạn có thể chuyển hướng đầu ra của bạn đến một tệp thì bạn không phải ghi tệp hoặc sử dụng xử lý tệp.

Đối với ví dụ:

Viết mã này trong C++

void main()  
{ 
    clrscr(); 
    cout<<"helloooooo" ; 

    cout<<"\f"; 
    cout<<"hiiiii" ; 

} 

và khi bạn biên dịch này, nó tạo ra một exe (cho ex abc.exe.)

sau đó bạn có thể chuyển hướng đầu ra của bạn đến một tệp bằng cách sử dụng:

abc > xyz.doc

.210

sau đó mở file xyz.doc bạn sẽ nhìn thấy ngắt trang thực sự giữa hellooo và hiiii ....

+9

Tôi không biết đó sẽ là một '.doc' hợp lệ. – NReilingh

+1

Không phải! Word cũng có thể đọc các tệp văn bản thực tế. – llouk

3

Vận chuyển trở lại và thức ăn đường cũng là tài liệu tham khảo để máy chữ, trong đó bằng một lần nhấn nhỏ trên tay cầm trên phía bên trái của toa xe (nơi giấy đi), tờ giấy sẽ xoay một lượng nhỏ xung quanh hình trụ, đẩy tài liệu lên một dòng. Nếu bạn đã gõ xong một dòng, và muốn tiếp tục một dòng, bạn sẽ đẩy mạnh hơn, cả hai tiến lên một dòng và trượt xe ngựa sang bên phải, sau đó tiếp tục gõ từ trái sang phải một lần nữa khi xe di chuyển với mỗi phím tắt . Không cần phải nói, từ bọc là cài đặt mặc định cho tất cả các quá trình xử lý văn bản của thời đại. P: D

10

Hãy xem xét máy in tác động của IBM 1403. CR đã di chuyển đầu in đến đầu dòng, nhưng KHÔNG chuyển tiếp giấy. Điều này cho phép "overprinting", đặt nhiều dòng đầu ra trên một dòng. Những điều như gạch chân đã đạt được theo cách này, như là in BOLD. LF nâng cấp một dòng giấy. Nếu không có CR, dòng tiếp theo sẽ in như một bước so le vì LF không di chuyển đầu in. FF nâng cấp giấy lên trang tiếp theo. Nó cũng thường di chuyển đầu in đến đầu dòng đầu tiên trên trang mới, nhưng bạn có thể cần CR cho điều đó. Để chắc chắn, hầu hết các lập trình viên đã mã hóa CRFF thay vì CRLF ở cuối dòng cuối cùng trên một trang vì một CR bổ sung được tạo bởi FF sẽ không thành vấn đề.

15

Ngoài các thông tin trên, vẫn còn một lịch sử thú vị về LF (\ n) và CR (\ r). [Tác giả gốc: 阮一峰 Nguồn: http://www.ruanyifeng.com/blog/2006/04/post_213.html] Trước khi máy tính xuất hiện, có một loại teleprinter có tên Teletype Model 33. Nó có thể in 10 ký tự mỗi giây. Nhưng có một vấn đề với điều này, sau khi in xong mỗi dòng, nó sẽ mất 0.2 giây để chuyển sang dòng tiếp theo, đó là thời gian in 2 ký tự. Nếu một ký tự mới được chuyển trong thời gian 0,2 giây này thì ký tự mới này sẽ bị mất. Vì vậy, các nhà khoa học đã tìm ra cách để giải quyết vấn đề này, họ thêm hai ký tự kết thúc sau mỗi dòng, một là 'Vận chuyển trở lại', để cho máy in biết cách đưa đầu in sang bên trái .; cái kia là 'Nguồn cấp dữ liệu dòng', nó cho máy in di chuyển giấy lên 1 dòng.

Sau đó, máy tính trở nên phổ biến, hai khái niệm này được sử dụng trên máy tính. Vào thời điểm đó, thiết bị lưu trữ rất tốn kém, vì vậy một số nhà khoa học cho rằng việc thêm hai ký tự vào cuối mỗi dòng là rất tốn kém, một là đủ, vì vậy có một số lý lẽ về việc sử dụng thiết bị nào.

Trong UNIX/Mac và Linux, '\ n' được đặt ở cuối mỗi dòng, trong Windows, '\ r \ n' được đặt ở cuối mỗi dòng. Hậu quả của việc sử dụng này là các tệp trong UNIX/Mac sẽ được hiển thị trong một dòng nếu được mở trong Windows. Trong khi tệp trong Windows sẽ có một^M ở cuối mỗi dòng nếu được mở trong UNIX hoặc Mac.

+1

Với việc phát hành OSX (dựa trên Bix Unix), Mac chuyển sang '\ n' - kết thúc dòng Unix. –

+0

"Các tệp trong UNIX/Mac sẽ được hiển thị trong một dòng nếu được mở trong Windows." 'WRITE.EXE' (hay còn gọi là Wordpad) có thể hiển thị chúng tốt. – thecarpy

69

\r là vận chuyển trở lại và di chuyển con trỏ trở lại như thế nào nếu tôi sẽ do-

printf("stackoverflow\rnine") 
ninekoverflow 

có nghĩa là nó đã chuyển con trỏ đến đầu "stackoverflow" và ghi đè bốn nhân vật bắt đầu từ "chín" được dài bốn ký tự.

\n là ký tự dòng mới làm thay đổi dòng và mất con trỏ đến đầu dòng mới như-

printf("stackoverflow\nnine") 
stackoverflow 
nine 

\f được thức ăn hình thức, việc sử dụng nó đã trở nên lỗi thời nhưng nó được sử dụng để đưa ra thụt đầu dòng như

printf("stackoverflow\fnine") 
stackoverflow 
      nine 

nếu tôi sẽ viết như-

printf("stackoverflow\fnine\fgreat") 
stackoverflow 
      nine 
       great 
+0

Nhưng ví dụ này không hoạt động ở các ngôn ngữ cấp cao! –

+0

@ ᔕI ᑎᗩ Kᗩᖇ ᐯᗩᑎᗪ Tôi làm như vậy: bạn ít nhất có thể làm tương tự trong Linux shell bằng cách sử dụng tiện ích 'printf' từ lõi. Hoặc thậm chí sử dụng 'echo -en' là một bash builtin. – Ruslan

+0

Làm cách nào để truyền tất cả các dòng dưới dạng một dòng trong một tệp? –

5

Là một bổ sung,

1, Vận chuyển trở lại: Đó là một thuật ngữ máy in có nghĩa là thay đổi vị trí in đến đầu hiện dòng. Trong thế giới máy tính, nó có nghĩa là quay trở lại đầu dòng hiện tại trong hầu hết các trường hợp nhưng là viết tắt của dòng mới hiếm khi.

2, Nguồn cấp dữ liệu dòng: Đó là thuật ngữ máy in có nghĩa là nâng cấp một dòng giấy. Vì vậy, vận chuyển trở lại và dòng nguồn cấp dữ liệu được sử dụng với nhau để bắt đầu in ở đầu của một dòng mới. Trong thế giới máy tính, nó thường có ý nghĩa giống như newline.

3, Nguồn cấp dữ liệu mẫu: Đó là thuật ngữ máy in, tôi thích giải thích trong this thread.

Nếu bạn đang lập trình cho máy in kiểu thập niên 1980, nó sẽ đẩy giấy và bắt đầu một trang mới. Bạn hầu như chắc chắn không bao giờ cần nó.

http://en.wikipedia.org/wiki/Form_feed

Nó gần trở nên lỗi thời và bạn có thể tham khảo Escape sequence \f - form feed - what exactly is it? cho lời giải thích chi tiết.

Lưu ý, chúng tôi có thể sử dụng CR hoặc LF hoặc CRLF để đứng cho dòng mới trong một số nền tảng nhưng không thể đứng dòng mới trong một số nền tảng khác. Tham khảo wiki Newline để biết chi tiết.

LF: Multics, Unix và các hệ thống Unix-like (Linux, OS X, FreeBSD, AIX, Xenix, vv), BeOS, Amiga, RISC OS, và những người khác

CR: Commodore 8 -bit máy móc, Acorn BBC, ZX Spectrum, TRS-80, Apple II gia đình, Oberon, cổ điển Mac OS lên đến phiên bản 9, MIT Lisp máy và OS-9

RS: QNX trước POSIX thực hiện

0x9B: Máy Atari 8 bit sử dụng biến thể ATASCII của ASCII (155 trong thập phân)

CR + LF: Microsoft Windows, hệ điều hành DOS (MS-DOS, PC DOS, vv), DEC TOPS-10, RT-11, CP/M, MP/M, Atari TOS, OS/2, Hệ điều hành Symbian, Palm OS, Amstrad CPC, và hầu hết các hệ điều hành không phải Unix và không phải của IBM mới

LF + CR: Acorn BBC và RISC OS.

Các vấn đề liên quan