如何调试我的C ++程序?

时间:2017-03-11 20:55:24

标签: c++

我尝试输入二维数组并将一行中的所有数字相加。然后我将该数字转换为二进制(8位)并在新的2d数组中再次设置它。这是我的代码。我得到负数输出,我希望二进制数。

我输入

1 2 3

4 5 6

7 8 9

我想要这个输出

00000110

00001111

00011000

我得到了

00000000

00000000

00000000

#include<iostream>

using namespace std;

int main()
{
    int n,m,j,i;
    int a[50][50],b[50][8],c[50];
    cin>>n>>m;
    for(i=0;i<n;i++)
    {
        c[i]=0;
        for(j=0;j<m;j++)
        {
            cin>>a[i][m];
            cin.ignore();
            c[i]+=a[i][j];
        }
    }
    for(i=0;i<n;i++)
        for(j=0;j<8;j++)
        {
            b[i][j]=c[i]%2;
            c[i]/=2;
        }
    for(i=0;i<n;i++)
    {   
        for(j=0;j<8;j++)
        {
            cout<<b[i][j];
        }
        cout<<endl;
    }   
}

1 个答案:

答案 0 :(得分:1)

我试图修改你的代码,但我很快意识到你做了一些奇怪的不必要的事情,所以我刚开始新鲜,这就是我为你所拥有的:

#include <iostream>
#include <vector>

using namespace std;

void add_array(int arr1[], int arr2[], int arrLength, int ret[]) {
    for(int i = 0; i < arrLength; i++) {
        ret[i] = arr1[i]+arr2[i];
    }
    return;
}

void to_binary(int n, vector<int> *ret) {
    while(n!=0) {
        ret->push_back(n%2==0 ?0:1);
        n/=2;
    }
}

int main() {
    int a[5] = {1,2,3,4,5};
    int b[5] = {6,7,8,9,10};
    int c[5];
    add_array(a, b, 5, c);
    cout << "A:" << endl;   
    for(int i = 0; i < 5; i++) {
        cout << i << " : " << a[i] << endl;
    }
    cout << "B:" << endl;   
    for(int i = 0; i < 5; i++) {
        cout << i << " : " << b[i] << endl;
    }
    cout << "C:" << endl;   
    for(int i = 0; i < 5; i++) {
        cout << i << " : " << c[i] << endl;
    }
    vector<int> vec;
    for(int i = 0; i < 5; i++) {
        to_binary(c[i], &vec);
        for(int j = 0; j < vec.size(); j++) {
            cout << vec[j];
        }
        cout << endl;
        vec.clear();
    }
    return 0;
}

我不知道你是如何处理这两个函数的添加所以我只是写了一个非常简单的函数,我将从参数开始

int arr1[], int arr2[]

这些是你要添加的两个功能,简单。

int arrLength

这告诉函数两个数组的长度是'for loop'

int ret[]

Ret是返回数组并且被传入以便可以使用添加的数组进行修改,现在您可以使用其他两个数组中的任何一个进行修改,但这是更好的做法,尤其是如果您想稍后重用其他数组

现在这里是函数本身

for(int i=0;i<arrLength;i++){ ret[i]=arr1[i]+arr2[i];}

这里我们循环遍历数组中的每个位置并将它们放在变量'ret'中,这就是整个事情。

功能

void to_binary(int n, vector<int> *ret)

使用可变大小的向量处理小数到二进制,它基本上就是你在函数中所做的。

main 功能中,我们创建了三个数组并使用必要的参数调用 add_array ,然后我们创建向量 vec ,然后继续遍历数组 c 获取每个位置的二进制数,然后因为我们将二进制数存储在 int vector 而不是字符串中,所以我们遍历向量

for(int j = 0; j < vector.size(); j++)

我们使用 vector.size() 来获取矢量的动态大小,然后打印出每个二进制数字,然后打印 endl 并清除矢量以供重复使用。