程序来创建不同大小的图案,但存在一些混乱

Program to create patterns of different sizes, and theres some confusion

本文关键字:存在 混乱 创建 程序      更新时间:2023-10-16

我非常感谢您对我正在编写的代码的帮助。我的程序的目标是能够创建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 ("ntt MENU nn" );
    printf ( "1. Pattern One" );
    printf ( "2. Pattern Two" );
    printf ( "3. Pattern Three" );
    printf ( "4. Pattern Four" );
    printf ( "Quit nn" );
}
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");
        }
    }
}

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

我真的很感激你能给我的任何帮助。我是这方面的初学者,我真的不知道该怎么办。

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

case 1:
     pattern1 (size1);
     break;

在我看来还可以。尤其是当你在提示中对数字进行了硬编码时。

其他问题:

  • 不要使用double作为Get_Option和Get_Size的返回值。在转换int和返回时,您应该收到有关精度损失的警告。CCD_ 5对于这些函数是合适的
  • pattern1中的printf调用使用%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