从用户那里获得12小时格式的时间并转换为24小时格式

时间:2016-05-22 09:59:54

标签: c

在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);

注意:我确实意识到我只得到一个角色。

2 个答案:

答案 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;
}