2013-02-17 2 views
0

я в настоящее время этой функции для печати каждых рядов моих таблицпечати из имен столбцов таблиц

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

Но я не думаю, что 'sizeof (szColName)/sizeof (szColName [0])' дает 'n'. деление размера двух указателей, вероятно, дает вам «1». – phoeagon

+0

Вы можете печатать заголовки в первый раз, когда вызывается функция (и относительно того, где сохранить этот флаг «первый раз», взгляните на 'void * NotUsed'). –

ответ

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

О да, это сделало это задание, но 'int n = sizeof (szColName)/sizeof (szColName [0]);' должно быть 'int n = sizeof (szColName);' Если я хочу распечатать все из szColName. Тем не менее спасибо! –

+0

Ой, подождите, я что-то обнаружил, когда я попытался выполнить снова, кол исчезнет. –

+0

@WongChunKiat. Верно. Но на самом деле я не совсем понимаю вашу спецификацию. Если вам нужно распечатать имена столбцов, измените 'firstline' на глобальную переменную, чтобы вы могли ее сбросить. – phoeagon

Смежные вопросы