2012-12-18 34 views
0

在下面的代碼中,我想在程序的最後使用一個printf來打印12小時的時間,但我希望它打印上午或下午,具體取決於存儲在變量am_pm中的哪一個。C:從分配的變量中替代打印字符串嗎?

我想我讀了我可以存儲字符在int(或浮動?),但我不知道如果我沒記錯的話。當然,這似乎是非法的,因爲我收到類型錯誤。

我也讀過,我可以使用數組來做到這一點,但我還沒有了解數組,我想知道是否有一個簡單的替代這樣的問題。

我知道另一種方法是簡單地使用兩個printf,我只需輸入「am」,另一個只需在字符串末尾鍵入「pm」,但這對我來說似乎是多餘的。

#include <stdio.h> 

int main(void) { 

int hour, minutes, am_pm; 

printf("Enter a 24-hour time:"); scanf("%d:%d", &hour, &minutes); 
if (hour > 12) 
    { 
    hour = (hour - 12); 
    am_pm = "pm"; // ERROR 
    } 
else 
    am_pm = "am"; // ERROR 

printf("Equivalent 12-hour time: %.2d:%.2d%d", hour, minutes, am_pm); 

} // end main 

我該怎麼做類似於我上面要做的事情?我知道在Python中,我只是做一些諸如print(「等價時間是:」+小時+分鐘+ am_pm)

+0

哇,謝謝所有的答案,他們都出色地工作。 Ian Goldby和tsurko,你是特別聰明的。我希望我能選擇你們所有的人作爲答案。 – LazerSharks

回答

2

首先,am_pm被聲明爲int,並在你的下面幾行嘗試給它分配字符串。這是非法的。其他答案顯示如何解決這個問題。我想添加另一種解決方案:

#include <stdio.h> 

int main(void) { 

int hour, minutes; 
int is_pm = 0; 

printf("Enter a 24-hour time:"); scanf("%d:%d", &hour, &minutes); 
if (hour > 12) 
{ 
    hour = (hour - 12); 
    is_pm = 1; 
} 


printf("Equivalent 12-hour time: %.2d:%.2d%s", hour, minutes, (is_pm)?"PM":"AM"); 

} // end main 

如果這對你來說看起來很奇怪 - 閱讀'問號運算符'。

+0

是的,已經瞭解了'問號運算符'。雖然沒有想過使用它。太好了! – LazerSharks

2

你不能在int中存儲字符串文字!

申報am_pm爲:

char *am_pm; 

和打印使用%s

printf("Equivalent 12-hour time: %.2d:%.2d%s", hour, minutes, am_pm); 
1

am_pm例如am_pm使用const char *。變化:

int hour, minutes, am_pm; 

... 

printf("Equivalent 12-hour time: %.2d:%.2d%d", hour, minutes, am_pm); 

到:

int hour, minutes; 
const char * am_pm; 

... 

printf("Equivalent 12-hour time: %.2d:%.2d %s", hour, minutes, am_pm); 
3

可以保存在一個int單個字符。 int的值是字符的ASCII碼。每個int只有一個字符。這可能是你(誤)記住的。

正如其他人所寫,宣稱am_pm爲char *,或更好的是const char *const告訴編譯器指出的字符串是隻讀的。

另一種選擇是在儲存AM_PM '一' 或 'P' 作爲int,

am_pm = 'p'; // Note single quotes for character (double quotes for strings) 

然後寫

printf("Equivalent 12-hour time: %.2d:%.2d%cm", hour, minutes, am_pm); 

%c表示解釋AM_PM作爲字符。這利用了只有「am」/「pm」的第一個字母改變的事實。

+1

這很聰明:) –