在下面的代码中,我想在程序结束时只使用一个printf
来打印12小时的时间,但我希望它根据存储在变量中的内容打印上午或下午am_pm
。
我以为我读过我可以将字符存储在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 :(得分:3)
你可以在int中存储单个字符。 int的值是字符的ASCII码。每个int只有一个字符。那可能就是你(错误) - 记忆。
正如其他人所写,将am_pm声明为char *
,或者更好的是const char *
。 const
告诉编译器指向的字符串是只读的。
另一个选择是将am_pm中的'a'或'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 :(得分:2)
您不能将字符串文字存储在int!
中将am_pm
声明为:
char *am_pm;
并使用%s
进行打印。
printf("Equivalent 12-hour time: %.2d:%.2d%s", hour, minutes, am_pm);
答案 2 :(得分: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
如果您觉得这很奇怪 - 请阅读'问号运算符'。
答案 3 :(得分:1)
const char *
使用am_pm
,例如改变:
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);