程序创建不同大小的模式,并且有些混乱

时间:2014-11-05 01:33:20

标签: c++ loops design-patterns

我真的很感激我正在撰写的这段代码的一些帮助。我的程序的目标是能够创建4种不同大小的不同模式。每个模式的大小由列数或行数决定。例如,大小为5的模式有5列和5行。每个模式由字符*和显示大小的数字组成。大小必须介于2到9之间。 这些是模式: 模式1:

*5555
5*555
55*55
555*5
5555*

模式2:

*****
*555*
*555*
*555*
*****

模式3:

55555
5***5
5***5
5***5
55555

模式4:

5555*
555*5
55*55
5*555
*5555

我的程序必须显示菜单并要求用户选择图案和尺寸。我必须有单独的函数来获取选项,获取大小,并打印每个模式。

以下是我目前为我的计划所做的事情:

#include <stdio.h>

void showmenu();
double Get_option ();
double Get_size ();
void pattern1 (int);
void pattern2 (int);
void pattern3 (int);
void pattern4 (int);

int main ()

{
    int size1, option1;
    const int pattern_1 = 1,
    pattern_2 = 2,
    pattern_3 = 3,
    pattern_4 = 4,
    quit = 5;


    do
    {
        showmenu ();

        option1 = Get_option ();

        size1 = Get_size ();

        if (option1 != quit)
        {
            switch (option1)
            { 
            case 1:
                pattern1 (size1);
                break;
            case 2:
                pattern2 (size1);
                break;
            case 3:
                pattern3 (size1);
                break;
            case 4:
                pattern4 (size1);
                break;
            case 5:
                exit (1);
                break;

            }
        }
    }
    while (option1 != quit);
    return 0;
}

void showmenu ()
{
    printf ("\n\t\t MENU \n\n" );
    printf ( "1. Pattern One" );
    printf ( "2. Pattern Two" );
    printf ( "3. Pattern Three" );
    printf ( "4. Pattern Four" );
    printf ( "Quit \n\n" );

}

double Get_option ()
{ 
    int option;

    printf ("enter option (1-5):");
    scanf ("%d", &option);

    while (option < 1 || option > 5)
    {
        printf ("incorrect option. Try again");
        printf ("Enter option (1-5):");
        scanf ("%d", &option);

    }
    return option;

}

double Get_size ()

{
    int size;

    printf ("Enter pattern size (2-9):");
    scanf ("%d", &size);

    while (size < 2 || size > 9);
    {
        printf ("Incorrect pattern size. Try again");
        printf ("Enter pattern size (2-9):");
        scanf ("%d", &size);

    }

    return size;


}

void pattern1 (int size1)
{
    int row, col;

    for (row = 0; row < size1; row++)
    {
        for (col = 0; col < size1; col++)
        {
            if (row == col)
                printf ("*");
            else
                printf ("%c", size);
                printf ("\n");
        }
    }
}

我对如何获得其他模式感到有点困惑。如果你读到这里,我真的很感激。此外,我收到一个错误,说“错误:案例标签不会减少到整数常量”

我非常感谢你能得到我的任何帮助。我是这方面的初学者,我不确定该怎么做。

1 个答案:

答案 0 :(得分:0)

我没有收到有关case标签的任何错误,因此它可能取决于你的编译器。 const int应该足够了(我想)。如果仍然出现此错误,请考虑使用enum而不是const int,或者甚至可以直接在case语句中使用数字。

case 1:
     pattern1 (size1);
     break;

对我来说看起来不错。特别是因为您已经在提示中对数字进行了硬编码。

您遇到的其他问题:

  • 不要使用double作为Get_Option和Get_Size的返回值。在转换int并返回时,您应该收到有关精度损失的警告。 int适用于这些功能。
  • printf中的pattern1来电使用%c来打印控制角色。使用%d打印一个数字。
  • 您的while语句末尾有一个分号,用于检查大小。这意味着它总是要求您两次,并且实际上并未检查您是否输入了无效的大小。

关于打印其他模式,只需尝试弄清楚如何手动执行,将其写为步骤(伪代码),然后将其转换为c。例如,模式2可以是。

Print N stars
Print a new line
for N - 2 times:
  Print one star
  Print N, N - 2 times
  Print one star
Print a new line
Print N stars
Print a new line