C: 代替从分配它的变量打印字符串?

标签 c string variables printf variable-assignment

在下面的代码中,我只想在程序末尾使用一个 printf 来打印 12 小时时间,但我希望它根据存储的时间打印上午或下午在变量 am_pm 中。

我以为我读到过我可以将字符存储在 int(或 float ?)中,但我不确定我是否记得正确。当然,这似乎是非法的,因为我遇到了类型错误。

我还读到我可以使用数组来做到这一点,但我还没有了解数组,我想知道是否有更简单的替代方法来解决这样的问题。

我知道另一种方法是简单地使用两个 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("equivalent time is:"+ hour + minutes + am_pm)

最佳答案

可以在 int 中存储单个字符。 int 的值是字符的 ASCII 码。每个int只有一个字符。这可能是您(错误)记住的内容。

正如其他人所写,将 am_pm 声明为 char *,或者更好的是,声明为 const char *const 告诉编译器指向的字符串是只读的。

另一种选择是将 'a' 或 'p' 作为 int 存储在 am_pm 中,

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”的第一个字母发生变化的事实。

关于C: 代替从分配它的变量打印字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13929001/

相关文章:

c# - 在 C# 中清理用户输入 - 最干净的方法?

r - 长变量名是否会降低 r 中的性能?

检查文件中的重复单词

c - 为什么打包不能跨同级 union 或结构工作

Swift - 我应该创建字符串 "count"的局部变量吗?

R-如何动态命名数据框?

c++ - C++ 类的静态变量初始化,为什么要包含数据类型?

c - Unix fork parent id 不一致

C 程序模仿 gdb 调用函数在核心上执行

android - 将 String[] 从一个 Activity 传递到另一个 Activity