格式化到控制台,C ++

时间:2009-09-20 06:29:05

标签: c++ formatting

我正在尝试在控制台窗口中将输出格式化为四个单独的字段,均匀分布。

out << left << setw(24) << "Name" << "Location" 
<< right << setw(20) << "Acres " << "Rating" << endl;

out << left << setw(24) << "----" << "--------" 
<< right << setw(20) << "----- " << "------" << endl;

while ( current_node )
    {
        out << left << setw(24) << current_node->item.getName() // equivalent tabs dont work?
            << current_node->item.getLocation() << right << setw(20) 
            << current_node->item.getAcres()        
            << " " << current_node->item.getRating()
            << endl;

        current_node = current_node->nextByName;
    }

上面的代码,出于某种原因,当setw(n)是相同的值时,它们不会均匀分配...

1 个答案:

答案 0 :(得分:3)

setw()操纵器仅影响下一个输出字段 - 它不是“粘性”。因此,您需要为每个输出字段指定所需的内容,而不仅仅是更改一次并期望它对以下每个输出项执行操作。

我想你想要这样的东西:

cout << left << setw(24) << "Name" << setw(24) << "Location" ;
cout << right << setw(20)<< "Acres" << setw(20) << "Rating" << endl;

cout << left << setw(24) << "----" << setw(24) << "--------" ;
cout << right << setw(20) << "-----" << setw(20) << "------"  << endl;

while ( current_node )
    {
        cout << left << setw(24) << current_node->item.getName()
                     << setw(24) << current_node->item.getLocation()
             << right 
                     << setw(20) << current_node->item.getAcres()
                     << setw(20) << current_node->item.getRating()
             << endl;

        current_node = current_node->nextByName;
    }

C ++流I / O - 它的类型安全,但不太安全。