2014-01-17 74 views
0

简而言之,需要使用0和1创建2d数组,然后每一行从二进制形式解码为十进制(数组是一个[5] [8])。我的想法是使用每一行的指针(将有5个void函数,但我有问题,先停止)。所有我得到的是一些随机数而不是简单的数组。谁能告诉我我的错误在哪里?这里是我的代码:用于解码二进制小数的二维数组

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
void VredBajt(int a[5][8],int *pb) 
{ 
for(int i=0;i<5;i++) 
    { 
    for(int j=0;j<8;j++) 
    { 
     pb=&(a[0][j]); 
     pb++; 
    }}} 

int main() 
{ 
    int a[5][8],i,j,pb; 
    srand(time(0)); 
    for(i=0;i<5;i++) 
    { 
    for(j=0;j<8;j++) 
    { 
     a[i][j]=rand()%(2); 
    } 
    } 
    for(i=0;i<5;i++) 
    { 
    printf("\n"); 
    for(j=0;j<8;j++) 
    { 
     printf("%3d",a[i][j]); 
    } 
    } 

    VredBajt(a,&pb); 
    printf("\n\n %5d",pb); 
} 
+0

输出是什么?你期望输出是什么?你有没有发现什么可能出错? –

+0

@sftrabbit well pb应当在当前程序中应该是2d数组的第一行(2d数组是由函数随机产生的,所以pb应该是由8个零和1组成的随机数),但它输出类似4534036 ... – user3127589

+0

@sftrabbit是但它应该写成第一行的二进制形式是__________,其十进制值是_________。我的第二个嵌套循环打印阵列 – user3127589

回答

0

变化:

pb=&(a[0][j]); 

要:

*pb=a[0][j]; 

虽然,目前还不清楚你希望通过可变pb指定不同的价值实现什么功能VredBajt中的for循环(此变量仅保留分配给它的最后一个值)。

UPDATE:

也许你的意思是这样的:

void VredBajt(int a[4][8],int *pb) 
{ 
    int val = 0; 
    for(int i=0;i<4;i++) 
    { 
     for(int j=0;j<8;j++) 
     { 
      val <<= 1; 
      val |= a[i][j]; 
     } 
    } 
    *pb = val; 
} 

现在还不清楚是否要功能VredBajt为整个表,或单个值返回单个值表中的每一行。

上面的实现假定你想为整个表单一个值。

因此,我不得不从5更改为4,因为int最多只能存储32位(4 * 8)。

+0

请做解释.. – doctorlove

+0

@barak manos不会改变...它只是输出不同的数字,如7684019 ... – user3127589

+0

@ user3127589:你仍然不清楚你希望通过分配不同的值到函数'VredBajt'的'for'循环中的变量'pb'(这个变量只保留最后一个赋给它的值)。 –

0

VredBajt函数中的错误,您操纵传递的pb指针,但是一旦函数完成,这个函数就不起作用。
主要来说,pb是一个从未初始化且从未分配的整数,因此打印它显示一个随机数。

如果您必须转换包含0或1的整数的数组,然后您可以将它转换为新的整数并打印。

int dec = 0; 
for (int i = 7; i != 0; --i) 
{ 
    dec <<= 1; 
    dec += a[0][i]; 
} 
+0

thx真的解决了我的问题,但我有一个更多的问题......它现在显示十进制值,我应该打印二进制和十进制......这就是我试图做的,我的主要问题是如何打印二进制值自它在二维数组 – user3127589

+0

@ user3127589中给出:您正在打印二进制值:查看您的第二个嵌套循环。 – stefaanv