格式化表 - 为什么'\ t'会被更改?

时间:2014-01-25 14:55:37

标签: c++ formatting cout

我想要很好地格式化网格。它是9x9网格。我想划分它

每隔3列后

- 输入“*”

否则 - '\ t'。

每隔3行后放“-------------------------”

水平线效果很好 - 这很容易。

但在第3栏中,它开始只打印2-3个空格而不是'\ t'。

代码:

  static int grid[9][9] ;

void print_grid(){
     cout << "PRINTING GRID" <<endl ;
     for(int row = 0 ; row < 9 ; row++){
            for(int column = 0 ; column < 9 ; column++){
                    if(column > 0 && (column + 1) % 3 == 0 && (column + 1) != 9 )
                          cout <<grid[row][column] << " * " ;
             else    cout  <<grid[row][column]  <<"\t" ;                                                           
                    }
                    if( (row+1) % 3 == 0){cout <<endl ; 
                      cout << "---------------------------------------------------------------------" <<endl ;}
                    else  cout <<endl <<endl ;                    
            }

     }

int main(){
     print_grid() ;   
    return 0 ;         
    }

table

我的问题是:在红色区域为什么打印2-3个空格而不是“\ t”? 为什么't'改变它的长度?

3 个答案:

答案 0 :(得分:1)

Tab键没有一定的长度,它所做的只是将光标前进到文档中的下一站。

停靠点之间的距离长度因系统而异。

答案 1 :(得分:1)

你的代码很好。这只是标签在控制台中的工作方式,它们会转到下一个标签停止,这将是非常8个字符。如果自上次制表符停止后已有5个字符,则只会前进3个字符。

您可以通过使用echo

检查是否获得了类似的结果
echo -e "X\tX\nXXXXX\tX"
X       X
XXXXX   X

如果您想要更多空间,可以使用两个连续的标签。如果你想要更多地控制对齐,你可以停止使用标签并尝试使用std :: setw。

答案 2 :(得分:1)

你真的不希望tab在这里你想要使用iostream alignment manipulators