【问题标题】:How do I check if there is an element in a Matrix?如何检查矩阵中是否有元素?
【发布时间】:2019-01-18 19:26:48
【问题描述】:

我正在尝试检查我的维度为 [10][10] 的矩阵,哪些点可用于存储数据(字符串),哪些点已被占用。

代码基本上会遍历整个矩阵并检查每个点。

我尝试过使用strlen!= NULL,但所有内容都显示该位置是免费的。

char parque[10][10];

for(int i = 0; i < 10; i++) {
    for(int j = 0; j < 10; j++) {
        parque[i][j] = "";
    }
}

parque[5][5]="f47ac10b-58cb-4372-a567-0e02b2c3d499,ANR";

for(int i = 0; i < 10; i++) {
    for(int j = 0; j < 10; j++) {
        if(parque[i][j] != "") {
            printf("The Spot [%d][%d] is taken",i,j);
        } else {
            printf("The Spot [%d][%d] is free",i,j);
        }
    }
}

基本上点 [5][5] 应该打印出它已被拍摄,至少这是我想要它做的......

提前致谢!

【问题讨论】:

  • 除此之外,您将parque[5][5] 设置为一个值,然后在双for 循环中立即将parque 中的所有内容设置为"",不再使用现场[5][5] .
  • 我错过了编辑,我正在运行的程序设置为该值,然后将所有内容设置为“”
  • 如果是 JS,怎么会被标记为 C?
  • 在 C 和 C++ 中,char[] parque[10][10]; 行是一个错误。它必须是char parque[10][10];。你用什么语言写的?
  • 此外,您不能将char 数组的元素设置为字符串,只要该元素本身不是char 数组即可。 parque 的每个元素都是 5 个字符的数组。因此,您可以使用parque[5] = "abcd";parque[5][5] = 'f';,但不能使用parque[5][5] = "abc";

标签: c arrays if-statement matrix


【解决方案1】:

你的声明

char parque[10][10];

声明一个二维数组char。如果你用严格的编译器编译你的代码,你会得到一个错误:

error: assignment makes integer from pointer without a cast [-Wint-conversion]
             parque[i][j] = "";
                          ^

您的意思是创建一个指向const char 的指针数组,如下所示:

const char* parque[10][10];

那么你的程序会说The Spot [5][5] is taken

【讨论】:

    【解决方案2】:

    您不能使用!=。您需要使用strcmp。当然,您需要在迭代之前初始化数组内容并使用其值与"" 字符串进行比较。

    这个条件:

    if(parque[i][j] != "")
    

    会变成:

    if (strcmp(parque[i][j], ""))
    

    【讨论】:

    • 我改为 if (strcmp(parque[i][j], "")) ,但随后导致分段错误(核心转储),我使用的虚拟机应该'不是问题吧?
    • 您的矩阵元素未初始化,如果幸运的话,它们为 NULL。确保初始化并检查 NULL。
    • @MyNameJeff 您收到 SEGMENTATION FAULT 因为您的 MATRIX 需要初始化。
    猜你喜欢
    • 2014-05-09
    • 2016-09-06
    • 1970-01-01
    • 2013-09-20
    • 2015-02-09
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多