【问题标题】:C: Substitute for printing a string from variable where it's assigned?C:替代从分配的变量中打印字符串?
【发布时间】:2012-12-05 10:11:53
【问题描述】:

在下面的代码中,我只想在程序末尾使用一个printf 来打印 12 小时时间,但我希望它打印 am 或 pm,具体取决于存储在变量 @987654322 中的哪个@。

我以为我读到我可以将字符存储在 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("equivalent time is:" + hour + minutes + am_pm)

【问题讨论】:

  • 哇,谢谢大家的回答,他们都做得很好。 Ian Goldby 和 tsurko,你们的特别聪明。我希望我能选择你所有的作为答案。

标签: c string variables printf variable-assignment


【解决方案1】:

您不能将字符串文字存储在 int 中!

am_pm 声明为:

char *am_pm;

并使用%s 打印。

printf("Equivalent 12-hour time: %.2d:%.2d%s", hour, minutes, am_pm);

【讨论】:

    【解决方案2】:

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

    【讨论】:

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

      【讨论】:

        【解决方案4】:

        首先 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 
        

        如果您觉得这很奇怪 - 请阅读“问号运算符”。

        【讨论】:

        • 是的,已经了解了“问号运算符”。不过没想过用。不错!
        猜你喜欢
        • 2015-04-11
        • 1970-01-01
        • 2016-04-08
        • 2018-05-09
        • 2012-12-10
        • 1970-01-01
        • 1970-01-01
        • 2020-03-30
        • 2021-02-19
        相关资源
        最近更新 更多