【c++中for循环怎么调用动态数组?】调用数组中第二个元素时会出现乱码。

#include
using namespace std;
#include
int main()
{
int sum = 0, sum1 = 0, n;
int *p;
cout << "请输入二进制的长度:" << endl;
cin >> n;
p = new int[n];
cout << "请输入一个二进制的数字:" << endl;
cin >> *p;
int s1 = { 0 };
for (int i = 0; i < n; i++)
{
if (p[i] == 0) //这边老是跳过第一个判断语句,直接进行第二个语句
{
sum = sum + 1;
}
else
{
sum1 = sum1 + 2;
}
cout << *p << "转换成十进制后为:" << sum + sum1 << endl;
}
delete[]p;
return 0;
}

img

应该是获取二进制数字到数组那里不对,然后根据数组内容把对应的二进制转为十进制的算法也需要改正,下面是一个实现,供参考:
参考链接:
位进制是什么意思_百度知道


#include <iostream> 
using namespace std;

int main()
{
    int sum = 0, sum1 = 0, n;
    int *p;
    cout << "请输入二进制的长度:" << endl;
    cin >> n;
    p = new int[n];
    
    cout << "请输入一个二进制的数字:" << endl;
    //获取n个数字输入到数组 
    for(int i=0;i<n;i++){
            cin >> p[i];
    }

    
//    for(int i=0;i<n;i++){
//        cout<<p[i];
//    }
//    cout<<endl;
    
    int s1 = { 0 };
    
    int weight=1;  //每一位的位权值 ,此为二进制数组最右边的数的位权值 
    for (int i = n-1; i >=0 ; i--)
    {
        //
        if (p[i] == 1) //这边老是跳过第一个判断语句,直接进行第二个语句
        {
            sum+= weight; //因为二进制每一位只有0和1,所以如果当前数不是0,加上他的位权值就可以了 
        }
        
        weight*=2;  //下一个数位的位权值 

        
        cout << *p << "转换成十进制后为:" << sum<< endl;
    }
    
    delete[]p;
    return 0;
}

img

你要学会调试啊在循环前面加个断点,可以看出你只输入了第一个元素*p,当然不行,要循环输入