Почему мои операторы switch правильно не выводят звездочки в моей программе на C ++? - PullRequest
0 голосов
/ 19 октября 2018

Программа должна выводить вертикальные и горизонтальные линии различной длины, используя звездочки.Количество звездочек и направление, в котором они будут идти, определяется пользователем в операторе ввода.Он должен быть создан с помощью операторов switch.Вот мой текущий код:

int main() {

    // Variables
    int length = 1;
    char direct;

    // User input choice
    if (length >= 1 && length <= 20) {
        cout << "\nEnter the line length and direction: ";
        cin >> length >> direct;
    }

    // If user input incorrect
    else {
        system("pause");
    }

    // Switch cases for horizontal or vertical
    switch (direct) {
    case 'h': for (int count = 0; count <= length; count++) {
        cout << "*";
        break;
    }
    case 'H': for (int count = 0; count <= length; count++) {
        cout << "*";
        break;
    }
    case 'V': for (int count = 0; count <= length; count++) {
        cout << "*" << "\n" << endl;
        break;
    }
    case 'v': for (int count = 0; count <= length; count++) {
        cout << "*" << "\n" << endl;
        break;
    }

    default:  cout << "Illegal comand" << endl;

    }

    system("pasue");
}

Вот как выглядит один из моих операторов вывода с горизонтальным выбором:

Enter the line length and direction: 4 h
***

*

Illegal Command

Вот как выглядит один из моих операторов вывода с вертикальным выбором:

Enter the line length and direction: 4 v

*

Illegal Command

Вот то, что я хочу, чтобы горизонтальный был похож:

Enter the line length and direction: 4 h

****

Вот то, что я хочу, чтобы вертикальный был похож:

Enter the line length and direction: 4 v

*
*
*
*

Почему звездочкине выводится правильно?Почему он выдает «Незаконное командование» каждый раз?Также подумал, что должен отметить, что я новичок, когда речь заходит о C ++.Спасибо!

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

У вас есть break; операторы в неправильном месте.

case 'h': for (int count = 0; count <= length; count++) {
    cout << "*";
    break;
}

должно быть;

case 'h': for (int count = 0; count <= length; count++) {
    cout << "*";
  }
  break;

Обратите внимание, что у вас та же логика для h иH.Вы можете комбинировать их.

case 'h':
case 'H':
  for (int count = 0; count <= length; count++) {
    cout << "*";
  }
  break;

Вы можете комбинировать регистры v и V аналогичным образом.

Вы можете улучшить его, создав вспомогательные функции для записи горизонтальных линий ивертикальные линии.

case 'h':
case 'H':
  writeHorizontalLine(length);
  break;

case 'v':
case 'V':
  writeVerticalLine(length);
  break;

где

void writeHorizontalLine(int length)
{
   for (int count = 0; count <= length; count++)
   {
      cout << "*";
   }
   cout << endl;
}

void writeHorizontalLine(int length)
{
   for (int count = 0; count <= length; count++)
   {
      cout << "*" << endl;
   }
}
0 голосов
/ 19 октября 2018

Попробуйте вставить ключевое слово break из фигурных скобок при каждом условии переключения.

сделайте это

case 'V': for (int count = 0; count <= length; count++) {
        cout << "*" << "\n" << endl;

    }
break;

вместо

case 'V': for (int count = 0; count <= length; count++) {
            cout << "*" << "\n" << endl;
            break;
        }
0 голосов
/ 19 октября 2018

написать оператор break вне цикла for. Если вы пишете оператор break внутри цикла for в случае, если он выходит из цикла for. Незаконные команды встречаются, потому что вы не использовали разрыв вне цикла for

...