【问题标题】:calculation of month as per Julian Calendar根据儒略历计算月份
【发布时间】:2017-06-06 08:01:47
【问题描述】:

我是 QT C++ 的初学者,我正在尝试在 label_j 上打印 Julian day,以考虑数组列表中提到的值。我无法做到这一点。请你看看并纠正它。提前非常感谢。

当前月份是从 UTC 获取的, 如果月份等于 jan 则打印 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);


}

【问题讨论】:

  • 你的代码能编译吗?您的 switch 语法似乎错误,即您从未指定大小写值:case 1: ...。您将字符串分配给 int,即month="January";。您将 int 分配给 QString,即answer=month_arr[0];
  • @m7913d ...谢谢你的关心,那么,相同的确切代码是什么,请你在这里告诉我。非常感谢

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


【解决方案1】:

我看到两个主要错误:

首先,您的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 所注意到的,您有很多类型错误。检查变量的类型!

【讨论】:

  • 谢谢你的关心,那么,相同的确切代码是什么,请你在这里告诉我。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 2020-04-02
  • 2020-07-02
  • 1970-01-01
相关资源
最近更新 更多