2014-03-26 12 views
8

Ich versuche, meine Ausgabe zu erhalten wie folgt aussehen:Wie verwende ich iomanip setw, setfill und links/rechts? Setfill stoppt seinen Ausgang nicht

size  time1  time2 
------------------------------- 
10   4   8 
100  48   16 
1000  2937  922 
10000  123011  3902 
100000  22407380 830722 

Und ich weiß, ich brauche setw zu verwenden, setfill und links. Meine Versuche geben jedoch immer wieder falsche Ergebnisse. Hier ist ein Beispiel für meinen Code:

std::cout << "size" << std::setw(20) << "time" << std::setw(20) << "time2\n"; 
std::cout << std::setfill('-') << std::setw(60) << "-" << std::endl; 
run = 10; 
for(int i = 0; i < 5; i++) { 
    std::cout << run; 
    run *= 10; 
    std::cout << std::setw(20) << std::left << time1[i]; 
    std::cout << std::setw(20) << std::left << time2[i] << "\n"; 
} 

Und hier ist der Ausgang:

size time1 time2 
------------------------------------------------------------ 
103-------------------13------------------ 
100171-----------------199----------------- 
100013183---------------667----------------- 
10000670130--------------8205---------------- 
10000014030798-------------1403079888--------- 

Ich habe versucht, die Reihenfolge zu ändern, dass ich mit setw, setfill und links, aber ich bin gerade blind fliegen jetzt. Ich habe auch Iomanip Tutorials gesucht. Ich folge den Anweisungen - soweit ich das beurteilen kann - aber ich verstehe es immer noch nicht.

Wie kann ich verhindern, dass das Setfill überläuft? Wie berechtige ich Links, aber benutze setw, um zu verhindern, dass die Zahlen ineinander übergehen?

Antwort

3

Wie wäre:

std::cout << "size" << std::setw(20) << "time" << std::setw(20) << "time2\n"; 
std::cout << std::setfill('-') << std::setw(60) << "-" << std::endl; 
run = 10; 
std::cout << std::setfill(' '); //fill with spaces 
for(int i = 0; i < 5; i++) { 
    std::cout << std::setw(20) << std::left << run; // fill the run column 
    run *= 10; 
    std::cout << std::setw(20) << std::left << time1[i]; 
    std::cout << std::setw(20) << std::left << time2[i] << "\n"; 
}