В настоящее время у меня есть эта функция, чтобы распечатать все строки моих таблиц
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;
}
Но он выводит каждый раз после вывода значений строк
Вы можете объявить 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.
}
Я предполагаю, что то, что вы предоставите, будет правильно выводить строки и имена столбцов. Я только добавил переменную, чтобы проверить, нужны ли имена столбцов печати.
Других решений пока нет …