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 を出力して、複数回出現するのではなく、1 回だけ表示されるようにするにはどうすればよいですか? これを試しました:

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;
}

ただし、行の値を出力した後は毎回出力します

4

1 に答える 1

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.
}

あなたが提供したものは、行と列の名前を正しく出力すると思います。列名の印刷が必要かどうかを確認する変数を追加しただけです。

于 2013-02-17T10:36:41.733 に答える