在 if-else 块之外返回变量值

Returning a variable value outside if-else block

本文关键字:返回 变量值 if-else      更新时间:2023-10-16

我想将 24 小时制转换为 12 小时制。

int midHour = 15;
int midHour12 = midHour - 12;
if(midHour <= 12)
{
    midHour12 = midHour;
    string meridiem("AM");
}
else
{
    midHour12 = midHour - 12;
    string meridiem("PM");
}
cout << midHour12 << meridiem;

但是,我不知道如何让子午线从 if else 块中"逃脱"。它的范围太小了。如何在 if-else 块之外访问子午线的值?

if 语句块中变量初始化时的答案不会回答问题。

你需要在

if 块之外声明meridiem。声明后,还需要使用 = 分配给meridiem

string meridiem;                                                               /*
^^^^^^^^^^^^^^^^                                                               */
if (midHour <= 12)
{
    midHour12 = midHour;
    meridiem = "AM";                                                           /*
    ^^^^^^^^^^^^^^^^                                                           */
}
else
{
    midHour12 -= 12;
    meridiem = "PM";                                                           /*
    ^^^^^^^^^^^^^^^^                                                           */
}

否则,变量将超出结束括号的范围。

你应该

先声明meridiem

   int midHour12;
    string meridiem;
    if(midHour <= 12)
    {
        midHour12 = midHour;
        meridiem = "AM";
    }
    else
    {
        midHour12 = midHour - 12;
        meridiem = "PM";
    }
    cout << meridiem;

或者,如果您以后不需要meridiem,只需打印midHour12,然后在if-else中打印"AM"或"PM">

您必须在 if-else 块之前声明meridiem,因为在 {...} 中声明的变量只能从块内部看到。

string meridiem;
int midHour = 15;
int midHour12 = midHour - 12;
if(midHour <= 12)
{
    midHour12 = midHour;
    meridiem = "AM";
}
else
{
    midHour12 = midHour - 12;
    meridiem = "PM";
}
cout << midHour12 << meridiem;

c++11 lambda 答案只是为了好玩:

#include <string>
 auto currentTime = [](int midHour)
 {
    return (midHour <= 12) ? std::to_string(midHour) + "AM" : std::to_string(midHour - 12) + "PM";
 }
 cout << currentTime(15);