2013-02-16 109 views
-1

我有以下回调函数。回调函数的格式化输出

// This is the callback function to display the select data in the table 
static int callback(void *NotUsed, int argc, char **argv, char **szColName) 
{ 
    for(int i = 0; i < argc; i++) 
    { 
     std::cout << " = " << argv[i] << std::endl; 
    } 

    std::cout << "\n"; 

    return 0; 
} 

// prepare our sql statements 
const char *pSQL[6]; 
pSQL[0] = "SELECT * FROM User"; 

// execute sql 
for(int i = 0; i < 1; i++) 
{ 
    rc = sqlite3_exec(db, pSQL[i], callback, 0, &szErrMsg); 
    if(rc != SQLITE_OK) 
    { 
     std::cout << "SQL Error: " << szErrMsg << std::endl; 
     sqlite3_free(szErrMsg); 
     break; 
    } 
} 

产生以下输出

1 
mark 
[email protected] 
98989898 
mark 
mark 
ADMN 
U 
Where are you studying 
SIM 
0 

2 
ken 
[email protected] 
92222898 
ken 
ken 
ADMN 
U 
Where are you studying 
SIM 
0 

3 
joseph 
[email protected] 
92333718 
joseph 
joseph 
ADMN 
U 
Where are you studying 
SIM 
0 

4 
ricky 
[email protected] 
81822801 
ricky 
ricky 
ADMN 
U 
Where are you studying 
SIM 
0 

5 
ck 
[email protected] 
94567828 
ck 
ck 
ADMN 
U 
Where are you studying 
SIM 
0 

我需要它被水平这样代替格式化的竖直:

1 mark  [email protected]  98989898 mark  mark  ADMN U Where are you studying SIM 0 
2 ken  [email protected]  92222898 ken  ken  ADMN U Where are you studying SIM 0 
3 joseph [email protected] 92333718 joseph joseph ADMN U Where are you studying SIM 0 
4 ricky  [email protected]  81822801 ricky  ricky  ADMN U Where are you studying SIM 0 
5 ck  [email protected]  94567828 ck  ck  ADMN U Where are you studying SIM 0 

我试图在回调函数使用该:

1) std::cout << argv[i] << "\t"; 
2) std::cout << argv[i] << setw(15); 
3) std::cout << setw(15) << argv[i]; 

但它给我的格式不正确。

1 mark [email protected] 98989898 mark mark ADMN U Where are you studying SIM 0 
2 ken [email protected] 92222898 ken ken ADMN U Where are you studying SIM 0 
3 joseph [email protected] 92333718 joseph joseph ADMN U Where are you studying SIM 0 
4 ricky [email protected] 81822801 ricky ricky ADMN U Where are you studying SIM 0 
5 ck [email protected] 94567828 ck ck ADMN U Where are you studying SIM 0 

回答

0

请勿在for循环内使用std::endl。该操纵器导致for循环中的每个项目都被打印在一个新行中。

+0

是的,我确实删除了std :: endl,并尝试使用后三者之一: 1)std :: cout << argv [i] <<“\ t”; 2)std :: cout << argv [i] << setw(15); 3)std :: cout << setw(15)<< argv [i]; – 2013-02-17 03:13:29