Распечатка имен столбцов таблицы

В настоящее время у меня есть эта функция, чтобы распечатать все строки моих таблиц

static int callback(void *NotUsed, int argc, char **argv, char **szColName)
{
for(int i = 0; i < argc; i++)
{
cout.width(17); cout << left << argv[i];
}

std::cout << "\n";

return 0;
}

Как распечатать szColName, чтобы он появлялся только один раз, а не несколько раз?
Пробовал это:

static int callback(void *NotUsed, int argc, char **argv, char **szColName)
{
int n = sizeof(szColName) / sizeof(szColName[0]);
for (int i = 0; i < n; i++)
{
cout.width(17); cout << left << szColName[i];
}
printf("\n");
for(int i = 0; i < argc; i++)
{
cout.width(17); cout << left << argv[i];
}

std::cout << "\n";

return 0;
}

Но он выводит каждый раз после вывода значений строк

0

Решение

Вы можете объявить static bool внутри обратного вызова, чтобы записать, распечатал ли он уже имена столбцов. Или, если вы хотите, чтобы иметь возможность сбросить его …

такие как:

static bool firstline = true;

static int callback(void *NotUsed, int argc, char **argv, char **szColName)
{
if (firstline){
int n = sizeof(szColName) / sizeof(szColName[0]);//this is incorrect but fixing
// it requires changing the prototype.
//See the comments below
for (int i = 0; i < n; i++)
{
cout.width(17); cout << szColName[i] << left;
}
printf("\n");
firstline=false;
}
for(int i = 0; i < argc; i++)
{
cout.width(17); cout << argv[i] << left;
}

std::cout << "\n";

return 0;
}
int main(){
for(int x=0;x<10;++x)callback( ... , ... , ... ); // give whatever argument you need to give

firstline = true;  //reset the variable so that next time you call it, the col names will appear
for(int x=0;x<10;++x)callback(...,...,...);// now the col names will appear again.
}

Я предполагаю, что то, что вы предоставите, будет правильно выводить строки и имена столбцов. Я только добавил переменную, чтобы проверить, нужны ли имена столбцов печати.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]