2017-05-14 15 views
18

đoạn mã sau in một hình vuông '*' ký tự:C++ cú pháp thú vị cho in dòng mới trong std :: cout

int m = 5; int n=5; 
for (int i = 1; i <= n; i++) 
    for (int j = 1; j <= m; j++) 
     std::cout << "*" << " \n"[j==5]; 

Output:

* * * * * 
* * * * * 
* * * * * 
* * * * * 
* * * * * 

Câu hỏi của tôi là liên quan đến phần " \n"[j==5]. Có ai biết cú pháp này hoạt động chính xác như thế nào không?

+7

'" \ n "' là một mảng 3 'char' và' [j == 5] 'là toán tử lập chỉ mục truy cập mục mảng đầu tiên hoặc thứ hai . – VTT

+3

Nó chỉ là một mảng gồm hai (hoặc nhiều hơn) ký tự được lập chỉ mục bởi một giá trị boolean. –

+2

Ba ký tự trong "\ n" là {'', '\ n', '\ 0'} – Caleth

Trả lời

21

" \n" là mảng 3 char s. Bạn có thể lập chỉ mục là mảng bình thường. Các giá trị Boolean chuyển đổi hoàn toàn thành số nguyên: false thành 0, true đến 1. Vì vậy, nó sẽ sử dụng '\n' cho j == 5' ' nếu không,

+0

Tôi có thể thực sự nhầm lẫn với một cái gì đó ... nhưng không phải là "\ n" một mảng chỉ có hai ký tự? tức là: '' là char đầu tiên và '\ n' là cái thứ hai? – NicoBerrogorry

+0

@NicoBerrogorry Chuỗi ký tự luôn luôn kết thúc bằng '\ 0' trong C và C++ – xinaiz

+0

Dah. Tệ của tôi, tôi không nghĩ về điều đó. Có lẽ vì cách std :: string được thực hiện. Cảm ơn! – NicoBerrogorry

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