2011-01-09 32 views
24

Kết quả của chương trình sau đây là: haiVận chuyển trở lại trong C?

Tôi đã không nhận được cách thức hoạt động vận chuyển của \r trong chương trình này và bất kỳ ai có thể giúp tôi?

#include <stdio.h> 
#include<conio.h> 

void main() 
{ 
    printf("\nab"); 
    printf("\bsi"); 
    printf("\rha"); 
    _getch(); 
} 
+2

[Đó không phải là kết quả tôi nhận được] (http://codepad.org/669KUYlv) (Ít nhất một khi tôi sửa chữa 'void main()' và công cụ 'conio.h' không chuẩn.) –

+0

I ' m bằng cách sử dụng Visual C++ đầu ra là "hai" –

+0

nếu bạn đặt \ n vào cuối ab như 'ab \ n' sẽ nhận được những gì bạn mong muốn? – cristian

Trả lời

55

Từ (ngữ nghĩa nhân vật hiển thị) 5.2.2/2:

\b (xóa lùi) Di chuyển vị trí tích cực đến vị trí trước đây về dòng hiện tại. Nếu vị trí hoạt động ở vị trí ban đầu của một dòng, hành vi của màn hình thiết bị không được chỉ định.

\n (dòng mới) Di chuyển vị trí tích cực đến vị trí ban đầu của dòng tiếp theo.

\r (vận chuyển trở lại) Di chuyển vị trí tích cực đến vị trí ban đầu của dòng hiện tại.

Ở đây, mã của bạn sản xuất:

  • <new_line>ab
  • \b: lại một ký tự
  • ghi si: đè b với s (sản xuất asi trên dòng thứ hai)
  • \r : quay lại đầu dòng hiện tại
  • ghi ha: ghi đè lên hai ký tự đầu tiên (sản xuất hai trên dòng thứ hai)

Cuối cùng, kết quả là:

\nhai 
+0

đầu ra bt là "hai" không ahi –

+0

@mr_eclair typo trên dòng cuối cùng: cố định – icecrime

+0

+1 nghi ngờ rõ ràng. cảm ơn bạn. –

11

Chương trình in ab, quay ngược lại một ký tự và in si ghi đè số b dẫn đến asi. Trả về vận chuyển trả lại dấu mũ cho cột đầu tiên của dòng hiện tại.Điều đó có nghĩa các ha sẽ được in trên as và kết quả là hai

+0

+1 bây giờ tôi đã cảm ơn bạn –

5

Step-by-step:

[newline] ab

ab 

[Backspace] si

asi 

[carriage-return] ha

hai 

Vận chuyển trở lại, không gây ra dòng mới. Trong một số trường hợp, một CR hoặc LF đơn lẻ có thể được dịch sang một cặp CR-LF. Đây là giao diện điều khiển và/hoặc luồng phụ thuộc.

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