为什么我的switch语句在C ++程序中不能正确输出星号?

时间:2018-10-19 06:46:14

标签: c++ for-loop switch-statement break

该程序应使用星号输出不同长度的垂直和水平线。星号的数量和行进方向由用户在输入语句中确定。必须使用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 :(得分:3)

在每种切换条件下,尝试将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;
        }

答案 1 :(得分:2)

您在错误的位置放置了break;语句。

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

需要成为;

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

请注意,hH的逻辑相同。您可以将它们结合起来。

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

您可以类似地组合案例vV

您仍然可以通过创建辅助功能来写水平线和垂直线来对其进行改进。

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;
   }
}

答案 2 :(得分:1)

在for循环外编写break语句。如果您在for循环内编写break语句,以防万一,那么它就会脱离for循环。遇到非法命令是因为您没有在for循环外使用break