Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中从多维数组中提取一行_C_Arrays_Multidimensional Array - Fatal编程技术网

在C语言中从多维数组中提取一行

在C语言中从多维数组中提取一行,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,好吧,看来我的问题写得不够好,所以让我们再来一次: 我正在尝试编写一个函数,它将接受一个多维数组int和另一个int的参数: int-ListNum(int-tab[]],int-n)。此函数的目标是获取所述数组并提取第一行,然后返回其元素列表(不带重复项),正如您可能猜到的那样,“int-tab[][]”是我们的数组,“int-n”是一行的大小,我只需要提取数组的第一行,所以我猜这就是我在参数中需要的所有信息 下面是一个它应该如何工作的示例:这是我们的数组-> 表[7][2]: |1 | 3

好吧,看来我的问题写得不够好,所以让我们再来一次:

我正在尝试编写一个函数,它将接受一个多维数组int和另一个int的参数: int-ListNum(int-tab[]],int-n)。
此函数的目标是获取所述数组并提取第一行,然后返回其元素列表(不带重复项),正如您可能猜到的那样,“int-tab[][]”是我们的数组,“int-n”是一行的大小,我只需要提取数组的第一行,所以我猜这就是我在参数中需要的所有信息

下面是一个它应该如何工作的示例:这是我们的数组-> 表[7][2]:
|1 | 3 | 1 | 2 | 0 | 2 | 2 |
|2 | 1 | 1 | 0 | 2 | 3 |

结果将是一个新数组,如下所示:|1 | 3 | 2 | 0|

现在我的问题是我不太擅长编码,我大致知道我应该做什么,但我仍然没有找到正确的解决方案。以下是我到目前为止所做的:

int listNum(int tab[][], int n){
int i, j, v=0, temp, *x;
x=malloc(n*sizeof(int));
if(x==NULL){
    printf("Error allocation memory !\n");
    return -1;
}
x[0]=tab[0][0];
for(i=0;i<n;i++){
    temp=tab[i][0];
    for(j=0;j<n;j++){
        if (temp==x[j]){
        i++;
        break;
        }
    }
x[v+1]=tab[i][0];
}
return x;
}
int-listNum(int-tab[][],int-n){
int i,j,v=0,温度,*x;
x=malloc(n*sizeof(int));
如果(x==NULL){
printf(“错误分配内存!\n”);
返回-1;
}
x[0]=制表符[0][0];
对于(i=0;iCatch!:)

事后陈述

*b=malloc(count*sizeof(int))

在函数中,可以插入支票

if ( *b != NULL )
{
   //...
}

虽然我没有理解你的问题,但我理解的是“你只需要打印多维数组的第一行……值不应该重复……”

您没有告诉我您是从用户还是从文件中读取MDarray

如果每次都是用户发来的..不要在第一位重复..在行中只存储一个值一次.然后打印一个[0][i]简单

如果来自文件,请输入代码

    firstline()
    {  
        for(i=0;i<n;i++) if(a[0][i]!='\O') 
        {
           printf("\t%c",a[0][i];
           for(j=i;j<n;j++) 
            if(a[0][i]==a[0][j]) 
               a[0][j]= '\0' ;
        }
     }
firstline()
{  

对于(i=0;iint行[选项卡行的大小]=tab[0]

请编辑问题,将所有相关信息包括在内,如预期和实际输出。不要在评论中添加这样的重要信息。是的,我知道,我的代码即将发布,我只是发现现在启动Linux虚拟机时遇到了一些问题,我想我可以随时提出这个问题,看看在我发布之前是否有人可以提供任何帮助把我的手放在代码上。对此很抱歉。@JoachimPileborg是的,mb,我是新来的,没有看到编辑按钮,所以我觉得它有点像9gag,发布后你就不能编辑了(尽管现在我想起来了,那会很糟糕!:x)@dx3d,你应该在@ArunA上阅读此信息和其他信息。感谢链接,我已经尝试重做了,希望我没有忘记任何事情。我想你应该理解数组作为函数参数是应该避免使用的,因为这样的东西会自动“调整”到指针,这样会造成混乱。建议在“listNum”参数列表中将“int tab[][]”重新写入为“int(*tab)[]“为了更好地显示实际类型。我投了反对票,因为你使用数组作为函数参数,这是有史以来最误导人的事情。考虑用指针来代替它。@VladfromMoscow我很抱歉同意FISOCPP…只要用指针作为参数就行了。我尽量保持简短,这是去年在我们的操作系统cou中进行的考试。”rse,基本上第一个问题是生成一个函数,该函数将采用2D数组(该数组应该是一个文件系统,第一行是文件编号,第二行是数据块)然后只提取文件编号,这样我们就可以使用这个函数来帮助我们制作另一个,它会显示阵列是否碎片化。我试图解释它,这样我就不会因为所有细节而打扰每个人,只需要回答我的问题。
if ( *b != NULL )
{
   //...
}
    firstline()
    {  
        for(i=0;i<n;i++) if(a[0][i]!='\O') 
        {
           printf("\t%c",a[0][i];
           for(j=i;j<n;j++) 
            if(a[0][i]==a[0][j]) 
               a[0][j]= '\0' ;
        }
     }
      x [ 0 ] = t a b [ 0 ] [ 0 ] ; 
      f o r ( i = 0 ; i < n ; i + + )
       { t emp = t a b [ i ] [ 0 ] ;    /* Ti0 is the
        column... it should be T[0][i] for 1st row*/
      f o r ( j = 0 ; j < n ; j + + ) 
       { i f ( t emp = = x [ j ] )
       { i + + ; b r e a k ; } } 
     x [ v + 1 ] = t a b [ i ] [ 0 ] ; //tab[0][i]