2010-07-06 131 views
9

在C++中,setw函數用於設置要用作下一個插入操作的字段寬度的字符數。 C中有沒有任何函數,我的意思是,在標準C庫中,它有相同的功能嗎?「setw」函數的C等效

+0

這可能是我第一次看到別人誰知道如何使用的iostream格式化,而不是如何做等價的東西用'的printf '......這幾乎總是相反的。 :) – 2010-07-06 17:01:22

+1

是的,我總是遇到同樣的事情。我在大學學習了C++風格的iostream格式器,但我們在工作中使用c風格。 – 2013-04-25 17:03:09

回答

18

printf ("%5d", 42);

將使用5位打印42。閱讀printf的手冊頁以瞭解字符填充,溢出和其他細微差別如何工作。

編輯: 一些例子 -

int x = 4000; 
printf ("1234567890\n"); 
printf ("%05d\n", x); 
printf ("%d\n", x); 
printf ("%5d\n", x); 
printf ("%2d\n", x); 

給人的輸出

1234567890 
04000 
4000 
4000 
4000 

注意,%2d是太小,無法處理傳遞給它的數量,但仍然打印的全部價值。

+1

請注意,在填充數字前面放置一個'-'將導致輸出對齊到左邊。例如,'printf(「% - 7s,」12345「);'會打印'12345__',其中'_'是一個空格,這與'printf(」%7s,「12345」)相反。給你'__12345'。 [相關的答案](http://stackoverflow.com/a/276869/1214700) – mb595x 2015-03-07 19:11:00

4

不,因爲C中使用的流不像流對象那樣維護狀態。

您需要使用例如printf()使用合適的格式代碼。

+0

你能指定我該怎麼做?我需要'setw(2)'的等效格式...... ...... – 2010-07-06 14:35:00

2

另一種選擇是定義格式字符串作爲變量:

char print_format[] = "%5d"; printf(print_format, 42); 

以上是類似於C++ setw,在可以在打印之前設置變量的內容。許多場合需要動態格式化輸出。這是實現它的一種方法。

-1

setw機械手: 該操縱器設置輸出的最小區域寬度。其語法如下: setw(x) 這裏setw會導致它後面的數字或字符串被打印在x個字符寬的字段中,x是在setw操縱器中設置的參數。必須同時使用運輸及工務局局長操縱包含頭文件是 示例代碼

#include <iostream> 
using namespace std; 
#include <iomanip> 
  
void main() 
{ 
int x1=12345,x2= 23456, x3=7892; 
cout << setw(8) << "Exforsys" << setw(20) << "Values" << endl 
        << setw(8) << "E1234567" << setw(20)<< x1 << endl 
        << setw(8) << "S1234567" << setw(20)<< x2 << endl 
        << setw(8) << "A1234567" << setw(20)<< x3 << endl; 
} 
+1

這不是c equivilent – 2013-04-25 17:04:16

+0

這不是一個有效的答案。不是c等價物。 – NicoBerrogorry 2017-10-21 07:08:41