2011-04-01 160 views
2

我目前使用下面的代碼來打印屏幕上的時間(以秒爲單位):如何使用printf打印空白字符?

for(int i = 1; i < 20; i++) 
{ 
    char cheese[0]; 

    if(i < 10) 
    { 
     cheese[0] = '0'; 
    } 
    else cheese[0] = '\0'; 

    system("CLS"); 
    printf("%c%i", cheese[0], i); 

    Sleep(1000); 
} 


我想輸出的時間爲:

.. 
08 
09 
10 
.. 


我怎樣才能做到這一點?

+6

我不確定你的問題是什麼。你的意思是換行符嗎?你能澄清一下嗎? – 2011-04-01 10:09:10

+1

空白字符?你的意思是一個空間? – quasiverse 2011-04-01 10:09:30

+0

@Thomas:我讀過'\ 0'用於NULL字符的地方。我試圖做的是在數字之前添加一個零,如果它低於10,並且添加一個空白字符(不是空格!),如果它是10或更高。我怎樣才能做到這一點? – Datoxalas 2011-04-01 10:13:56

回答

3

使用類似:

printf("%02i", i); 

這將始終產生至少兩位數字,帶前導零如果需要的話。

如果你想墊的空間,而不是零,你應該使用:

printf("%2i", i); 

將產生:

1 
2 
10 

不推薦:

如果你想如果不使用格式字符串中的大小說明符,你可以這樣做:

char pad[2]; 
pad[1] = 0; // make sure the pad string is terminated properly 
if (i >= 10) { 
pad[0] = 0; // plain zero - end of string marker 
} else { 
pad[0] = '0'; // character zero 
} 
printf("%s%i", pad, i); 

pad將是零長度的字符串如果i具有至少兩位數,所以printf的不會輸出一個字符。

+4

另外,你希望''cheese''是1個字符,所以將它定義爲'char cheese;'''或''char cheese [1];''。現在它有零長度。 – Darhuuk 2011-04-01 10:11:42

+0

真棒,正是我需要的。 – Datoxalas 2011-04-01 10:12:02

+0

@達魯​​克:謝謝! – Datoxalas 2011-04-01 10:12:22

3
for(int i = 1; i < 20; i++) 
{ 
    system("CLS"); 
    printf("%02d", i); 

    Sleep(1000); 
} 

...可能更接近你想要的。

+0

@RobH:對不起,我不能upvote,哈哈。 – Datoxalas 2011-04-01 10:17:06

+0

@Datoxalas我不認爲你明白這是什麼。 printf中的02表示應該至少打印2個字符,如果沒有足夠多,其餘的應該用0填充,這就是你想要的。 – quasiverse 2011-04-01 10:19:59

+0

@quasiverse @Mat:我明白......但我也想知道爲什麼我不能輸出空白字符! – Datoxalas 2011-04-01 10:24:02

0

如果你想要包含兩位數,爲什麼不簡單地這樣?

的printf( 「%02D」,i)的

添加在零字符值> 10的聲音嚇人順便說一句。 (也是因爲%c會打印 - 什麼 - 實際上是零,不像%s,它不會停在遇到的第一個\ 0上)。

0

這會給輸出你想

for(int i = 1; i < 20; i++) 
{   
    printf("%d2", i);  
    Sleep(1000); 
} 

但是如果你想打印出來的時間過去了,你不應該做這種方式。

+0

那我該怎麼做呢? – Datoxalas 2011-04-01 10:15:53

+0

你的printf語法是錯誤的。 'd'和'2'被倒置,並且沒有'0',這將不會零填充。 (它將填充空白)。 – Mat 2011-04-01 10:22:33

+0

@Datoxalas:睡眠並不能保證你快一秒鐘,它會給你不少於1秒的時間。所以你應該做什麼取決於你使用的框架或庫。 – Oleg 2011-04-06 07:25:47

相關問題