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

时间:2013-06-13 17:16:43

标签: c++

我想将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;

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

variable initialization within an if statement blocks的答案没有回答这个问题。

4 个答案:

答案 0 :(得分:3)

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

string meridiem;                                                               /*
^^^^^^^^^^^^^^^^                                                               */

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

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

答案 1 :(得分:2)

您应首先声明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”

答案 2 :(得分:2)

你必须在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;

答案 3 :(得分:2)

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