在K.N. King的书C编程:现代方法,第7章有练习9(以及练习8),要求用户输入12小时的时间,然后将其转换为24小时制。 / p>
e.g。 9:11 PM - > 21:11
对于我的问题,我理解如何以例如以下的格式获取时间。 8:37 PM或8:37 [space] PM但我不知道如何让它适用于这两种格式。
由于
int h, m;
char meridiem;
printf("Enter a 12-hour time: ");
scanf_s("%d:%d%c", &h, &m, &meridiem);
printf("%c\n", meridiem);
注意:我确实意识到我只得到一个角色。
答案 0 :(得分:1)
处理用户输入最好分两步处理:输入,解析。 然后处理数据。
第1步:简单阅读用户输入
printf("Enter a 12-hour time: ");
fflush(stdout); // Insure output is completely sent
char buf[80];
if (fgets(buf, sizeof buf, stdin) == NULL) Handle__InputClosed();
第2步:解析输入。很多方法。这个使用"%n"
来检测成功解析的输入的结束。 "%n"
用于保存扫描的当前偏移量。 "%d %1[aApP]"
中的空格允许在分钟和上午/下午之间在用户输入上可选地出现空格。
int hour, minute;
char meridian[2];
int n = 0;
sscanf(buf, "%d:%d %1[aApP]%*[mM] %n", &hour, &minute, meridian, &n);
if (n == 0 || buf[n] || hour < 0 || minute < 0 || hour >= 12 || minute >= 60) {
puts("Bad input");
return -1;
}
第3步:处理经过验证的输入
meridian[0] = toupper(meridian[0]);
if (meridian[0] == 'A') {
if (hour >= 12) hour -= 12; // 12:00 AM --> 0:00
} else {
hour += 12;
}
printf("%d:%02d\n", hour, minute);
答案 1 :(得分:-1)
#include<stdio.h>
int main(){
char time[10];
int hour,minute,second;
gets(time);
hour=(time[0]-'0')*10+(time[1]-'0');
minute=(time[3]-'0')*10+(time[4]-'0');
second=(time[6]-'0')*10+(time[7]-'0');
if(hour==12&&time[8]=='A')
printf("%02d:%02d:%02d\n",hour-12,minute,second);
else if(hour==12&&time[8]=='P')
printf("%02d:%02d:%02d\n",hour,minute,second);
else if(hour<12&&time[8]=='A')
printf("%02d:%02d:%02d\n",hour,minute,second);
if(hour<12&&time[8]=='P')
printf("%02d:%02d:%02d\n",hour+12,minute,second);
return 0;
}