If else

Запутался в двух соснах.
Без else все работает, но не так как нужно.
С else компилятор дает ошибку expected ‘;’ before ‘}’ token
Нужно чтобы после else выполнялось лишь при условии a==0

if(a!=0)   QMessageBox::information(this,"New Info","Your table is not full"); //goto metka;}
           //else

        QString matr[4][2]; int i,j;
        for (i=0; i<2; i++)
            for(j=0; j<4; j++)
            {
                QTableWidgetItem* item = ui->tableWidget->item(i,j);
                matr[i][j]=item->text();
                QMessageBox::information(this,"info",matr[i][j]);
            }

                //metka:

Непонятно в чем именно проблема из этого описания, { } пропущен что ли?

if (a != 0)
{

}
else
{

}

И советую использовать { } даже когда не обязательно (одна инструкция внутри), чтобы избежать лишних ошибок ошибок при дальнейшем редактировании )
Так во всех популярных соглашениях по оформлению кода.

Или если что-то другое непонятно про if, можно почитать какой-нибудь учебник. https://metanit.com/cpp/tutorial/2.12.php

Применил фигурные скобки. Ошибки исчезли, но не могу добиться того, чтобы при наличии незаполненной ячейки таблицы не выполнялось копирование содержимого таблицы в двумерный массив, т.е. мне надо невыполнение в этой ситуации второго цикла.(после else

void MainWindow::on_pushButton_clicked()
{
    QString array[4][2];
    int a=0;

    for(int i=0; i<2; i++)
        for(int j=0; j<4; j++)
        {
            QTableWidgetItem* item = ui->tableWidget->item(i,j);
            if(ui->tableWidget->item(i,j)==0)
            {
             ui->tableWidget->setItem(i,j, new QTableWidgetItem("The Cell is Empty"));
             a=a+1;
            }
        }
    if(a!=0)   { QMessageBox::information(this,"New Info","Your table is not full");} //goto metka;}
           else
    {
        QString matr[4][2];
    int i,j;
        for (i=0; i<2; i++)
            for(j=0; j<4; j++)
            {
                QTableWidgetItem* item = ui->tableWidget->item(i,j);
                matr[i][j]=item->text();
                QMessageBox::information(this,"info",matr[i][j]);
            }
}
                //metka:
}

При первом нажатии на Button показывает пустые ячейки таблицы.
При повторном нажатии на Button, не смотря на то, что оставил ячейки пустыми,
выполняется копирование в массив.

Спасибо

Чтобы не путаться для начала код надо форматировать нормально (отступы в первую очередь).
Например, после засовывания в онлайн-форматер стало так:

void MainWindow::on_pushButton_clicked()
{
    QString array[4][2];
    int a = 0;

    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 4; j++)
        {
            QTableWidgetItem* item = ui->tableWidget->item(i, j);
            if (ui->tableWidget->item(i, j) == 0)
            {
                ui->tableWidget->setItem(i, j, new QTableWidgetItem("The Cell is Empty"));
                a = a + 1;
            }
        }
    if (a != 0)
    {
        QMessageBox::information(this, "New Info", "Your table is not full");
    } // goto metka;}
    else
    {
        QString matr[4][2];
        int i, j;
        for (i = 0; i < 2; i++)
            for (j = 0; j < 4; j++)
            {
                QTableWidgetItem* item = ui->tableWidget->item(i, j);
                matr[i][j] = item->text();
                QMessageBox::information(this, "info", matr[i][j]);
            }
    }
    // metka:
}

Так они ж тут заполняются?

Кажется понял. Надпись это заполнение. Поэтому на втором заходе a уже равно нулю.
Огромное спасибо. Почему-то тупил, не понимал.

void MainWindow::on_pushButton_clicked()
{
    int i, j, b=0;
    QString array[4][2];
    for(int i=0; i<2; i++)
        for(int j=0; j<4; j++)
        {
            QTableWidgetItem* item = ui->tableWidget->item(1,1 );
            ui->tableWidget->setItem(1, 1, new QTableWidgetItem("Empty"));
             if (ui->tableWidget->item(i,j)->text()=="Empty") {b=b+1;};
        }
    if(b!=0) { QMessageBox::information(this,"New Info","Bjaka");};
}

13_13_13_13_13

Ошибки не показывает, но при нажатии на Button, т.е. при выполнении функции on_pushButton_clicked срывается в сообщение, что работа exe прекращена

Из-за строки if (ui->tableWidget->item(i,j)->text()==“Empty”) {b=b+1;};

При запуске в режиме отладки скорее всего покажет на какой строке вылет.

Скорее всего ui->tableWidget->item(i,j) возвращает NULL, соответственно к ->text() обращаться нельзя.


При вставке кода на форуме надо нажимать кнопку Код

Воспользовался https://stackoverflow.com/questions/22754866/qt-how-to-check-if-there-empty-cell-in-qt-table-widget

void MainWindow::on_pushButton_clicked()
{
    int i, j, b=0;
    QString array[4][2],R1;
    for(int i=0; i<2; i++)
        for(int j=0; j<4; j++)
        {
           QString w;
            QTableWidgetItem* item = ui->tableWidget->item(1,1 );
            ui->tableWidget->setItem(1, 1, new QTableWidgetItem("Empty"));
            QTableWidgetItem *item1(ui->tableWidget->item(i,j));
            if(item1) {R1=item1->text();};
            if(R1=="Empty") {b=b+1;};
        }
    if(b!=0) { QMessageBox::information(this,"New Info","Bjaka");};
}

Теперь не вылетает, но нужно все проанализировать и разобраться.
Большое спасибо за поддержку.