首页 > 解决方案 > 输出不如预期

问题描述

我的程序的想法是打印 n 的单个数字。但相反,它会在第一行一次打印所有数字,并在后续行中打印一堆零或垃圾值。我想访问每个单独的数字,就像我们可以使用数组一样。假设输入是 1234,为什么不打印 1\n2\n3\n4?

#include <iostream>
#include <cmath>
#include <stdlib.h>
using namespace std;

int main()
{
    int* n=(int*)malloc(1000*sizeof(int));
    cin>>*n;
    int len;
    len = log10(*n) + 1;
    for(int i=0;i<len;i++)
    {
        cout<<n[i]<<endl;
    }
}

标签: c++pointers

解决方案


出于某种原因,你认为

int* n=(int*)malloc(1000*sizeof(int));
cin>>*n;

将读取一个数字并将每个数字放入动态数组的不同元素中n。如果发生这种情况,那么您的其余代码将起作用(有点)。但当然不是。相反,读取的数字被放入*n(或者,同样的东西,n[0]),其余的动态数组元素未初始化,这解释了您看到的垃圾值。

我很难理解为什么您认为您的代码可能会按照您想要的方式运行。我猜您只是一个乐观的人,并认为如果您足够努力,编译器就会理解。这似乎是初学者中相当普遍的态度。不幸的是,编程不是那样的。


推荐阅读