2013-06-30 29 views
5

Nên là một câu hỏi tầm thường, nhưng thấy rằng setw chỉ áp dụng cho đầu ra ngay lập tức của nó, và không chắc chắn làm thế nào để cho phép nó áp dụng cho tất cả các đầu ra sau đây.Làm thế nào để cho phép setw áp dụng cho tất cả các stdout sau đây?

Ví dụ, đối với các dòng mã sau đây

cout<<setw(3)<<setfill('0')<<8<<" "<<9<<endl; 

hoặc

cout.width(3); 
cout.fill('0'); 
cout<<8<<" "<<9<<endl; 

Tôi muốn đầu ra được 008 009 thay vì 008 9

+0

có thể trùng lặp với [Thao tác iomanip nào là 'dính'?] (ht tp: //stackoverflow.com/questions/1532640/which-iomanip-manipulators-are-sticky) – djf

+0

In '" "' với chiều rộng 3 sẽ xuất ra 3 dấu cách hoặc thậm chí là '" 00 "' – anatolyg

+0

Hoặc trùng lặp của [Đặt chiều rộng trong luồng đầu ra C++] (http://stackoverflow.com/questions/7248627/setting-width-in-c-output-stream). – Simon

Trả lời

2

setw không dính, vì vậy bạn phải nói điều đó mỗi lần:

cout << setfill('0') << setw(3) << 8 << " " 
    << setw(3) << 9 << endl; 
1

Viết dài std :: setw (14) mỗi khi được tốn thời gian công việc, vì vậy đã viết một macro & sử dụng như sau:

Macro:

#define W14 std::setw(14) 

Ví dụ # 1: Cách sử dụng đơn giản:

std::cout << W14 << 8 << W14 << 9 << W14 << "ABC" << W14 << "DEFGHI" << std::endl; 

Output:

8    9   ABC  DEFGHI 

Ví dụ # 2: Tôi đang giải quyết một câu hỏi trong thuật toán, sử dụng nó như dưới đây, trong một vòng lặp for:

std::cout 
    << W14 << suffixes[i].first.c_str() 
    << W14 << suffixes[i - 1].first.c_str() 
    << W14 << i 
    << W14 << lcp[i] << std::endl; 

Output: là đẹp, trong vòng lặp for:

 a$    $    1    0 
     ana$   a$    2    1 
    anana$   ana$    3    3 
    banana$  anana$    4    0 
     na$  banana$    5    0 
    nana$   na$    6    2 
Các vấn đề liên quan