gpt4 book ai didi

c - 从用户获取 12 小时格式的时间并转换为 24 小时格式

转载 作者:太空宇宙 更新时间:2023-11-04 03:30:13 25 4
gpt4 key购买 nike

在 K.N. King 的书 C Programming: A modern approach,第 7 章有练习 9(也是练习 8),它要求用户输入 12 小时制时间,然后将其转换为 24 小时制。

例如晚上 9:11 -> 21:11

对于我的问题,我了解如何以例如格式获取时间8:37PM 或 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);

注意:我确实意识到我只得到一个字符。

最佳答案

处理用户输入最好分两步处理:输入、解析。 然后处理数据。

第一步:简单读取用户输入

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]" 中的空格允许在分钟和 AM/PM 之间的用户输入中出现空格。

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

关于c - 从用户获取 12 小时格式的时间并转换为 24 小时格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37372875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com