在C ++中格式化列

时间:2010-09-28 01:30:39

标签: c++

我有以下程序生成乘法表。当输出达到两位数时会出现格式化问题。如何理顺柱子?

#include <iostream>

using namespace std ;
int main() 
{
  while (1 != 2)
  {
    int column, row, c, r, co, ro; 

    cout << endl ;

    cout << "Enter the number of columns: " ;
    cin >> column ;
    cout << endl ;
    cout << "Enter the number of rows:    " ;
    cin >> row ;
    cout << endl ;

    int temp[column] ;
    c = 1 ; 
    r = 1 ; 
    for(ro = 1; ro < row ; ro ++ ){
      for(co = 1; co < column ; co ++ ){
            c = c ++ ;
            r = r ++ ;
            temp [c]= co * ro;

            cout << temp[c] << " ";
      }
      cout << endl ;
    }
    system("pause");  
  }
}

5 个答案:

答案 0 :(得分:3)

C ++有setwsetfill就是为了这个目的。 setw设置宽度,setfill设置填充字符。

在您的情况下,您可以使用以下内容:

#include <iostream>
#include <iomanip>

int main (void) {
    std::cout << std::setw(5) << 7 << std::endl; // will output "    7".
    return 0;
}

您的代码存在许多其他问题,其中至少部分内容如下所示:

  • 您没有为数组分配足够的空间,它应该是column*row(或使用二维数组)。
  • 数组索引从0开始,而不是1。
  • c = c++不是一个好主意,c++足以增加c
  • 您可能尝试在每次迭代中增加c两次,一次for语句本身,一次for正文。
  • system("pause");是一个丑陋的黑客,其语言提供了非常好的getcharcin等效。
  • while (1 != 2)看起来很简单错误 :-)因为1永远不会等于2。只需使用while (1)for(;;) - 任何值得他们的盐的编码员都会知道你的意思。

答案 1 :(得分:2)

使用setw output manipulator

cout&lt;&lt; setw(3)&lt;&lt;温度[C];

默认情况下,这会使用空格来填充,看起来就像你想要的那样。

如文档所示,您需要包含iomanip。

答案 2 :(得分:2)

您可以使用如下的流操纵器设置列元素的宽度:

cout << setw(3) << temp[c]

但这是你需要解决的问题:c = c++;不会增加变量!

答案 3 :(得分:2)

这是旧式printfcout容易得多的情况之一。将cout << temp[c] << " "替换为printf("%2d ", temp[c])

我希望您在c计算中发现了这个错误。

答案 4 :(得分:1)

您可以使用“\ t”而不是“”。