根据朱利安历法计算月份

时间:2017-06-06 08:01:48

标签: c++ arrays switch-statement qt4 qt-creator

我是QT C ++的初学者,我正试图在label_j上打印朱利安日,而不考虑数组列表中提到的值。我无法做到这一点。请你能看到并纠正它。非常感谢提前。

当前月份是从UTC获取的,   如果月份相等,那么打印0,   月等于打印31,   月等于三月,然后打印59,依此类推,直至到达十二月。

void MainWindow::getJulianDay()

{

  int month_arr[]={0,31,59,90,120,151,181,212,243,273,304,334};
  QString January, February, March, April, May, June, July, August, September, October, November, December;

  QDateTime local(QDateTime::currentDateTimeUtc());
QDateTime UTC(local.toUTC());
QString month=UTC.toString("MMMM");



switch (month)
{

    case January:
        month=month_arr[0];
        break;
    case February:
         month=month_arr[1];
        break;
    case March:
        month=month_arr[2];
        break;
    case April:
        month=month_arr[3];
        break;
    case May:
        month=month_arr[4];
        break;
    case June:
        month=month_arr[5];
        break;
    case July:
        month=month_arr[6];
        break;
    case August:
        month=month_arr[7];
        break;
    case September:
        month=month_arr[8];
        break;
    case October:
        month=month_arr[9];
        break;
    case November:
        month=month_arr[10];
        break;
    case December:
        month=month_arr[11];
        break;
    default: month=invalid;
    break;

    ui->label_j->setText(month);


}

1 个答案:

答案 0 :(得分:0)

我看到两个主要错误:

首先,您的case语句条件为空。你应该这样做:

switch(variable) {
    case condition1:
        ...
        break;
    case condition2:
        ...
        break;

    ...

    default:
        ...
        break;
}

因此,您的代码变为:

switch (month);
{
    case 1: 
        month="January";
        answer=month_arr[0];
        break;
    case 2: 
        month="February";
        answer=month_arr[1];
        break;

    ...

    default: 
        month="invalid";
        break;
}

第二个主要问题是ui->label_j->setText(answer);应该超出switch循环。就像目前一样,这个陈述永远不会被执行。

编辑:正如m7913d所注意到的,你有很多类型错误。检查变量的类型!