C:替换从分配的变量中打印字符串?

时间:2012-12-18 08:28:20

标签: c string variables printf variable-assignment

在下面的代码中,我想在程序结束时只使用一个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)

4 个答案:

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