2014-11-10 5 views
0

Я делаю программу «Случайная прогулка», и я не могу заставить бары отображаться правильно.Как это правильно отформатировать?

Вот мой код (я включать только то, что мне нужна помощь):

#include <iostream> 
#include <conio.h> 
#include <string> 
#include <ctime> 
#include <random> 

using namespace std; 

int main() { 

    srand(time(0)); // make it "random" 

    int max; 
    int min; 
    int location; //location of goat on bridge 
    int steps; 
    int total_steps; 
    int choice; 
    int move; // go forward or backward 

    for (;;) { // Keep running until user quits 

     system("CLS"); 

     cout << "Random Walk Simulator" << endl; 
     cout << "1) Display Trial " << endl; 
     cout << "2) Run Statistics Over 50 Trials " << endl; 
     cout << "3) Quit. " << endl; 

     cin >> choice; // get choice 

     cout << "\n"; 

     if (choice == 1) { // Display Trial 

      steps = 1; 
      location = 4; // center of bridge 

      cout << "Step 0: | * | " << endl; 

      while (location >= 1 && location <= 7) { // Keep running until goat falls off bridge 

       move = rand() % 2 + 0; // 0 and 1 

       if (move == 0) { // Move backward 

        location--; 
       } 

       if (move == 1) { // Move forward 

        location++; 
       } 

       switch (location) { // Show location 

       case 0: cout << "Step " << steps << ": |  | " << endl; 
        break; 
       case 1: cout << "Step " << steps << ": |*  | " << endl; 
        break; 
       case 2: cout << "Step " << steps << ": | *  | " << endl; 
        break; 
       case 3: cout << "Step " << steps << ": | * | " << endl; 
        break; 
       case 4: cout << "Step " << steps << ": | * | " << endl; 
        break; 
       case 5: cout << "Step " << steps << ": | * | " << endl; 
        break; 
       case 6: cout << "Step " << steps << ": |  * | " << endl; 
        break; 
       case 7: cout << "Step " << steps << ": |  *| " << endl; 
        break; 
       case 8: cout << "Step " << steps << ": |  | " << endl; 
        break; 
       default: break; 

       } 

       steps++; // Iterate steps 
      } 

      cout << "\nTotal steps taken: " << (steps - 1) << endl; // (steps-1) since I start the goat off at the center of the bridge 

      system("PAUSE"); 
     } 

Вот пример вывода:

Random Walk Simulator 
1) Display Trial 
2) Run Statistics over 50 Trials 
3) Quit 
1 

Step 0: | * | 
Step 1: | * | 
Step 2: |  * | 
Step 3: | * | 
Step 4: | * | 
Step 5: | * | 
Step 6: | * | 
Step 7: | * | 
Step 8: | * | 
Step 9: | * | 
Step 10: | * | 
Step 11: | * | 
Step 12: | *  | 
Step 13: |*  | 
Step 14: |  | 

Как отформатировать это правильно? Я вроде как новичок в C++, извините.

+0

При правильном форматировании вы имеете в виду, что линия для шага 10 должна быть выровнена с шагом 9? –

+1

, например: 'cout <<" Шаг "<< setw (5) << шагов <<": | ... "'. Не забудьте добавить '#include '. Или вы можете добавить '' \ t "' перед '" | "' – Xonxt

+1

_ @ Kawaiiii_ BTW: я уверен, что вы получите дополнительные баллы за свое решение, если вы собираетесь заменить 'switch () 'с общим циклом (рассмотрим дополнительную функцию), который выводит символы' '' 'и' '* '' в правильном порядке и в балансе. –

ответ

2

Вам необходимо разместить дополнительные I/O manipulators для правильного форматирования вывода.

Просто замените

<< steps 

со следующим кодом

<< right << setw(2) << steps 

в этих case блоков

case 0: cout << "Step " << steps << ": |  | " << endl; 

setw(2) устанавливает ширину выходного поля до 2, в то время как right говорит, чтобы выровнять поля на правой границе. Таким образом, вывод будет выглядеть

... 
Step 8: | * | 
Step 9: | * | 
Step 10: | * | 
Step 11: | * | 
... 

Вам нужно #include <iomanip> дополнительно.

2

Я бы просто использовал вкладку. На вашей линии, которые выглядят примерно так:

cout << "Step " << steps << ": |  | " << endl; 

Изменить это будет:

cout << "Step " << steps << ":\t|  | " << endl; 
2

Попробуйте использовать setw()setw reference

Так ваш cout должен выглядеть как

cout<<std::setw(9); 
cout << "Step " << steps; 
cout<<std::setw(0); 
cout<<: "|  *|"; 
+0

Вам понадобится #include

Смежные вопросы