2013-06-19 221 views
1

我試圖在我的sprintf語句中完成一些格式化,但似乎沒有像我期望的那樣工作。這裏是行:使用sprintf()獲取格式正確

n = sprintf(buffer, "x = %d.%d, y = %d.%d, z = %d.%d \n", x1, x2, y1, y2, z1, z2); 

在該打印輸出x1是數字的整個部分,x2是小數部分。一切都會很好,除非我需要將x2,y2和z2填充爲2位數 - 這意味着我需要填充前導零。

隨着例子,我在網上看到的,好像這樣做應該工作:

n = sprintf(buffer, "x = %d.%02d, y = %d.%02d, z = %d.%02d \n", x1, x2, y1, y2, z1, z2); 

不過,這反而會產生這樣的:

x = 2.2d, y = 37.2d, z = 2.2d 

以上37實際上是X2,它顯然已經轉移了y1的位置。我試圖在'02'周圍放置括號,但是這也沒有做任何事。

我試圖分裂過這樣的時期:(但沒有工作)

n = sprintf(buffer, "x = %d. %02d, y = %d. %02d, z = %d. %02d \n", x1, x2, y1, y2, z1, z2); 

我真的不知道什麼是錯的......我會很感激的任何幫助。這在sprintf中並不是特別重要(我理論上可以寫一些'if'語句並使它以這種方式工作),但它會很好。

謝謝!

+0

在這裏正常工作。您是否曾意外地在轉換中輸入了'O'而不是'0'? [牽強,我知道] –

+0

@DanielFischer,以及那些粘貼從我的代碼複製,我認爲他們是0。我再次檢查了一下:P我有一種爲此快速替換的功能,但我很想知道爲什麼這不起作用。 – Mewa

+0

好的,如果這是一個複製粘貼,你的格式是正確的。它從這裏複製粘貼,視覺檢查說應該。那麼,你使用的是什麼編譯器(和庫實現)?看起來好像它沒有實現所有的標誌。出於好奇,它對'%d。%2d'做了什麼?它是否是空間墊? –

回答

1

這是一個示例代碼和輸出。

float x1 = 10.12222; 
float y1 = 20.23333; 
float z1 = 30.34444; 
int xi = 10; 
int yi = 20; 
int zi = 30; 
int x0 = 5; 
int y0 = 5; 
int z0 = 5; 
int xl = 10; 
int yl = 10; 
int zl = 10; 
char chr[512]; 

printf("x = %5.2f, y = %5.2f, z = %5.2f\n", x1, y1, z1); 
printf("x = %10d, y = %10d, z = %10d\n", xi, yi, zi); 
printf("x = %010d, y = %010d, z = %010d\n", xi, yi, zi); 
printf("x = %-10d, y = %-10d, z = %-10d\n", xi, yi, zi); 
printf("x = %10.5d, y = %10.5d, z = %10.5d\n", xi, yi, zi); // DYNAMIC 

/* Dynamic formatting of DYNAMIC commented line*/ 
sprintf(chr, "Dynamic: x = %%%d.%dd, y = %%%d.%dd, z = %%%d.%dd\n", 
     xl, x0, yl, y0, zl, z0); 
printf(chr, xi, yi, zi); 

輸出將是這樣的。

x = 10.12, y = 20.23, z = 30.34 
x =   10, y =   20, z =   30 
x = 0000000010, y = 0000000020, z = 0000000030 
x = 10  , y = 20  , z = 30 
x =  00010, y =  00020, z =  00030 
Dynamic: x =  00010, y =  00020, z =  00030 

%x.yd裝置,

X - 爲對整數總字符數。

y - 在該長度內填充0。

%10.5d會給下面的結果爲10,100,1000,10000 100000 100000

bbbbbbbbbb => Spaces 
    00010 
    00100 
    01000 
    10000 
    100000 
    1000000 

我希望這可以幫助你格式化。