【问题标题】:C - Pattern Printing within a Switch MenuC - 切换菜单中的图案打印
【发布时间】:2025-11-26 19:40:02
【问题描述】:

我是 C 新手,但必须为学校做一个项目。我想打印一个菜单,用户在其中选择一个模式,然后打印出来。应该是这样的:

Program running

但是正如您所看到的,当我第二次选择该模式时,它不会显示该模式。它只显示一个空格。到目前为止,这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int numerodefilas;

    printf("Ingrese la cantidad de filas/longitud del objeto:\n");
    scanf("%d", &numerodefilas);

    int fila, columna, eleccion;
    int numerodecolumnas = numerodefilas;   

    do {
        printf("1: Triangulo\n");
        printf("2: Piramide\n");
        printf("\nSalir\n");
        scanf("%d", &eleccion);

        switch (eleccion) {
        case 1:
            for (fila = 1; fila <= numerodefilas; fila++) {
                for (columna = 1; columna <= numerodecolumnas; columna++) {
                    printf("X");
                }
                printf("\n");
                numerodecolumnas--;
            }
            break;
        case 2: /* Second choice */
            break;
        case 3:
            system("cls");
            printf("Adios!\n");
            break;
        default:
            printf("No seleccionaste una opción correcta!");
            break;
        }
    } while (eleccion != 3);

    system("PAUSE");
    return 0;
}

标识符是西班牙语,因为我必须用西班牙语。只是关于名称的快速解释:

  1. numerodefilas = numberoflines
  2. numerodecolumnas = 列数
  3. fila = 线
  4. columna = 列
  5. 选举 = 选择
  6. "Ingrese la cantidad de filas/longitud del objeto" = 输入对象的行数/经度"
  7. 三角 = 三角形
  8. Piramide = Pyramide
  9. Adio = 再见

我不知道是否还有人可以帮助我?如果您需要更多解释,请告诉我!难道我做错了什么?图案印刷有问题吗?我真的很感激任何帮助。

【问题讨论】:

  • 使用调试器跟踪程序的执行。在尝试尽可能多地自己调试之后,在 * 上发帖应该是最后的手段。您没有展示出太多的调试工作。
  • 没有理由这样做numerodecolumnas--;
  • 程序的输出可能是西班牙语,但强迫程序员使用西班牙语作为标识符是愚蠢的:它降低了全世界其他程序员的可读性。我在法国与法国开发人员一起工作,但坚持标识符要有有意义的英文名称。
  • @chqrlie 我知道这很愚蠢。可悲的是,我的老师希望我这样做。他们的论点是,如果我们复制任何代码,我们至少会在更改标识符方面做一些工作。
  • @TheUnriashol:这是一个糟糕的论点。我希望他们不赞成使用非 ASCII 字母作为标识符,最近版本的 C 标准和一些常见的编译器都支持这一点。虽然#define π 3.14159265358979323846264338327950288 有一些美,但你应该避免int sim = 1, não = 0;

标签: c menu switch-statement


【解决方案1】:

如果我错了,请纠正我。

您的问题可能是因为您没有将列重置为默认值?

您用numerodecolumnas--; 减去第一次有效但第二次该值已经为 1 或 0 的列,因此您的循环可能不起作用。

【讨论】:

  • 哦,是的,你可能就在那儿。谢谢你的提示。我会看看如何让它工作。谢谢。
【解决方案2】:

@R.Eduard 非常感谢您指出我的代码中的缺陷,我终于让它工作了:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int numerodefilas;

    printf("Ingrese la cantidad de filas/longitud del objeto:\n");
    scanf("%d", &numerodefilas);

    int fila, columna, eleccion,numerodecolumnas;  

    do {
        printf("1: Triangulo\n");
        printf("2: Piramide\n");
        printf("\nSalir\n");
        scanf("%d", &eleccion);

        switch (eleccion) {
        case 1:
            numerodecolumnas=numerodefilas;
            for (fila = 1; fila <= numerodefilas; fila++) {
                for (columna = 1; columna <= numerodecolumnas; columna++) {
                    printf("X");
                }
                printf("\n");
                numerodecolumnas--;
            }
            break;
        case 2: /* Second choice */
            break;
        case 3:
            system("cls");
            printf("Adios!\n");
            break;
        default:
            printf("No seleccionaste una opción correcta!");
            break;
        }
    } while (eleccion != 3);

    system("PAUSE");
    return 0;
}

我必须进行的更改是在重新启动循环之前重置 numerodecolumnas 值。我通过删除 int numerodecolumnas=numerodefilas; 非常简单地做到了这一点。并将其添加到 for 循环之前。

再次感谢您!

【讨论】: