【问题标题】:'Plus' plattern in C prints way more columns and rowsC中的“加号”模板打印更多的列和行
【发布时间】:2021-06-15 18:10:47
【问题描述】:

如果我输入 3 行 3 列,它会打印如下内容:

它应该打印 3 行和 3 列,但它打印的内容比输入要多。

#include <stdio.h>

int main(){
    int f, c;
    printf("Rows\n");
    scanf("%d", &f);
    printf("Columns\n");
    scanf("%d", &c);

    int cruz[f][c];
    int mf=sizeof(cruz);
    int mc=sizeof(cruz[0]);
    int mitadFilas=mf/2;
    int mitadColumnas=mc/2;

    for (int i = 0; i < mf; i++) {
        for (int j = 0; j < mc; j++) {
            if(i == mitadFilas || j == mitadColumnas) {
                cruz [i][j] =1;
            }else {
                cruz [i][j] =0;
            }
            printf("%d ",cruz[i][j]);
        }
        printf("\n");
    }
}

【问题讨论】:

  • 为什么要把事情复杂化?为什么不i &lt; fj &lt; c

标签: c multidimensional-array


【解决方案1】:

sizeof 运算符用于检索对象中的字节数,而不是用于检索数组中的元素数。

在这种情况下,您已经有了 fc 的元素数,因此您应该将它们用作元素数。

换句话说,线条

    int mf=sizeof(cruz);
    int mc=sizeof(cruz[0]);

应该是

    int mf=f;
    int mc=c;

如果您出于某种原因想坚持使用sizeof,请将对象的大小除以一个元素的大小以检索元素的数量。

    int mf=sizeof(cruz) / sizeof(cruz[0]);
    int mc=sizeof(cruz[0]) / sizeof(cruz[0][0]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多