2009-02-10 47 views
44

Làm cách nào để định dạng đầu ra của tôi trong C++?In các số 0 đầu với toán tử đầu ra C++ (printf equivalent)?

printf("%05d", zipCode); 

Tôi biết tôi chỉ có thể sử dụng printf trong C++, nhưng tôi muốn các nhà điều hành sản lượng <<: Nói cách khác, C++ tương đương với việc sử dụng các printf như thế này là gì.

Bạn chỉ cần sử dụng các mục sau?

std::cout << "ZIP code: " << sprintf("%05d", zipCode) << std::endl; 

Trả lời

69

này sẽ làm các trick:

#include <iostream> 
#include <iomanip> 

using namespace std; 
cout << setw(5) << setfill('0') << zipCode << endl; 

// or use this if you don't like 'using namespace std;' 
std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl; 

Các thao tác IO phổ biến nhất mà kiểm soát đệm là:

  • std::setw(width) bộ chiều rộng của t anh ta.
  • std::setfill(fillchar) đặt ký tự điền.
  • std::setiosflags(align) đặt căn chỉnh, nơi căn chỉnh là ios :: left or ios :: right.
+2

Lưu ý rằng bạn cũng có thể sử dụng 'cout << left' hoặc' cout << right' để căn chỉnh. –

7

Sử dụng setw and setfill cuộc gọi:

std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl; 
+0

Tái kích hoạt và +1 kể từ khi nó cho thấy làm thế nào để làm điều đó trong bất kỳ không gian tên (cũng được thêm vào setfill, sqook, hy vọng bạn không m ind). – paxdiablo

+0

Đủ công bằng. "sử dụng không gian tên std;" chắc chắn là điều ác. ;) –

+0

Tôi nghĩ câu trả lời này nên đề cập đến, không giống như thiết lập từ 'std :: setw', thiết lập' std :: setfill' sẽ dính sau khi kết xuất được thực hiện, nói cách khác là ký tự fill cho 'std :: cout' sẽ được thay đổi vĩnh viễn (cho đến khi được sửa đổi bởi một 'std :: setfill') khác. Vì nó không phải là điều này là mong muốn, nó sẽ có vẻ tốt nhất để lưu và khôi phục lại nhân vật điền trước đó. –

0

hay,

char t[32]; 
sprintf_s(t, "%05d", 1); 

chí đầu ra 00001 như OP đã muốn làm

+3

OP yêu cầu một cách rõ ràng về cách sử dụng toán tử '<<' thay cho (s) printf. – jankes

+0

@ jankes sẽ là: std :: cout << "mã ZIP:" << sprintf_s (t, "% 05d", 1) << endl; –

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