2010-09-28 64 views
0

我有以下生成乘法表的程序。輸出達到兩位數時出現格式問題。我如何理順這些列?在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"); 
    } 
} 
+0

你的程序中有一個很大的錯誤會使它經常崩潰:它應該是int temp [column * row]'。另外,如果你不想重複使用表格,你可以在循環內執行'cout << co * ro'並移除'temp'數組。 – schnaader 2010-09-28 01:42:54

+0

我問爲什麼有一個臨時的。循環後不使用它。爲什麼不只是做'cout << setw(3)<< co * ro;'? – JoshD 2010-09-28 01:45:49

回答

2

使用setw output manipulator

COUT < <運輸及工務局局長(3)< <溫度[C];

默認情況下,它使用空格填充,看起來像你想要的。

您將需要包含iomanip,如文檔所述。

1

您可以使用「\ t」而不是「」。

+2

我不會低估這一點,因爲它在至少相當有限的情況下很有用。但是,由於它完全取決於終端的tabstop設置,因此它不適合生產質量的代碼。如果你不控制製表符,或者如果你輸出一個跨越這樣的tabstop的數字,你的輸出將會消失。 – paxdiablo 2010-09-28 01:42:28

3

爲此,C++有setwsetfillsetw設置寬度和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等效。因爲1永遠不會等於2。只需使用while (1)for(;;) - 任何值得使用的鹽編碼器都會知道您的意思。
2

您可以通過使用流操縱這樣設置你的列元素的寬度:

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

但是這是你需要除了修復某些東西:c = c++;不增加變量!

2

這是老式的printfcout容易得多的情況之一。將cout << temp[c] << " "替換爲printf("%2d ", temp[c])

我希望你已經發現了你的c計算中的錯誤。

+0

在Yoda的不朽的話語中,當Luke試圖在Dagobah崩潰後使用C++特性時:「不,不要試試,不要試試。」 :-)對於C編碼器,使用'printf'可能比'cout'更簡單,但是如果你想成爲一個C++編碼器,可以使用C++的全部功能。是的,我知道'printf'可以工作,所以'#define'宏代碼和常量 - 這並不一定是他們的好主意。再一次,我不願意downvote,因爲在我過渡到C++之前,我很早就使用它,而且比在一天內完整學習iostream/iomanip更容易。 – paxdiablo 2010-09-28 02:05:55

+1

@paxdiablo,我知道printf是*方式*過時了,我有-1票來證明它。我也知道它比替代品更安全。我仍然經常發現它是實用的方法,可能是我仍然堅持的唯一C部分。 – 2010-09-28 03:17:31