web-dev-qa-db-fra.com

Comment utiliser le setw, setfill et gauche / droite d'iomanip? Setfill n'arrête pas sa sortie

J'essaie d'obtenir ma sortie pour ressembler à ceci:

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

Et je sais que je dois utiliser setw(), setfill() et left. Cependant, mes tentatives continuent de me donner une sortie incorrecte. Voici un exemple de mon 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";
}

Et voici la sortie:

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

J'ai essayé de changer l'ordre dans lequel j'utilise setw(), setfill() et left, mais je vole juste en ce moment. J'ai également recherché des tutoriels iomanip. Je suis les instructions - pour autant que je sache - mais je ne comprends toujours pas.

Comment puis-je empêcher la setfill() de s'exécuter? Comment puis-je justifier la gauche mais utiliser setw() pour empêcher les nombres de se rencontrer?

12
user3448821

Que diriez-vous:

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";
}
6
sj0h

la réponse de sj0h est excellente, sauf que les titres ne correspondent pas tout à fait. Pour le corriger, j'ai commencé la ligne de titre avec "left" et "setw", je devais également terminer par "endl" au lieu de "\ n".

  std::cout << std::left << std::setw(20) << "size" << std::setw(20) << "time" << std::setw(20) << "time2" << std::endl;

  std::cout << std::setfill('-') << std::setw(60) << "-" << std::endl;
  run = 10;
  std::cout << std::setfill(' ');  //fill with spaces
  for(int i = 0; i < 10; 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] << std::endl;
  }
1
oneofthesixbillion