2012-09-24 83 views
0

這是我在解決書籍問題時提出的代碼,其中我被要求編寫一個程序以12小時格式獲取輸入並以24小時格式輸出。這個C程序爲什麼工作? (字符類型相關的查詢)

有效的輸入爲例如下午1點11,1:11P,1點11分,1:11P,1點11分,1點11 P,下午1點11,1點11 P

這裏是代碼:

#include<stdio.h> 

int main (void) 
{ 
int hr=0,min=0; char time; 


scanf("%d : %d %c", &hr, &min, &time); 

if(time =='p' || time == 'P' || time == 'PM' || time == 'pm' && hr >= 12) 
{ 
    hr +=12; 
} 

printf("The 24 hour format time is = %d : %d", hr, min); 


printf("% Test result = c", test); 

return 0; 
} 

在if條件我寫道:

if(time =='p' || time == 'P' || time == 'PM' || time == 'pm' && hr >= 12) 

據我所知字符類型僅允許存儲1個字符。那麼爲什麼這個工作,當我給這樣的輸入9:11 PM。它是如何工作的這種情況?

time == 'pm' || time == 'PM' 

輸出爲:

The 24 hour format time is =21:11 

編輯1:

GNU GCC編譯器被使用。代碼位於單個文件中,不在項目中。

+0

你使用什麼編譯器?你在編譯什麼系統,並且(交叉編譯時主機和目標可能不同)?你給了什麼選擇?你是否啓用了所有的警告和調試信息? –

+1

您忘記啓用編譯警告。如果你這樣做了,編譯器會警告你試圖使用「多字符常量」。 – pmg

+1

可能的重複[在多個字符上使用C++時單引號做什麼?](http://stackoverflow.com/questions/7459939/what-do-single-quotes-do-in-c-when-used-多個字符) – pb2q

回答

4

即使沒有你得到的警告(或至少應該得到),你有條件time == 'P'這是評估爲真,你就完成了。

另外請注意,你應該包裝所有或(),否則>= 12甚至沒有檢查。例如:

((time =='p' || time == 'P') && hr >= 12) 
+0

thanx(.........): d –

相關問題