我的程序的想法是打印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;
}
}
答案 0 :(得分:1)
cin >> *n
时,您不是逐位读取数字,而是整体读取。
因此,当您cin >> *n
并键入1234
时,*n
变成1234
。
如果要打印所有单个数字,例如1\n2\n3\n4
,则需要自己分隔数字:
int pos = 1;
while (*n != 0)
{
n[pos] = n % 10;
n /= 10;
++pos;
}
for (--pos; pos > 0; --pos)
{
cout << n[pos] << endl;
}
但是,最简单的方法是将数字作为字符串而不是数字读入,然后逐个打印出字符(即数字)。
char str[1000];
cin >> str;
for (char *s = str; *s; ++s)
{
cout << *s << endl;
}
您还可以将数字转换为字符串,然后执行相同的操作:
#include <cstring>
using namespace std;
...
char str[1000];
sprintf(str, "%d", *n);
for (char *s = str; *s; ++s)
{
cout << *s << endl;
}
-------原始答案:
如果要打印n
的第一个元素:
cout << *n;
或
cout << n[0];
您的代码
for(int i=0;i<len;i++)
{
cout<<n[i]<<endl;
}
表示
cout << n[0] << endl;
cout << n[1] << endl;
cout << n[2] << endl;
...
cout << n[len-1] << endl;
答案 1 :(得分:1)
n
被声明为指向可以存储1000
整数实体的存储位置的指针。使用cin>>*n;
时,将读取一个整数值并将其存储在1000
块中的第一个存储块中。整数的各个数字不会存储在单独的块中,因此不能单独打印它们。
例如,如果输入为123
,
n[0]
存储123
,n[1],n[2],...n[999]
存储垃圾值。
要将值存储在n[1]
中,您将不得不再次使用cin
。
答案 2 :(得分:1)
出于某种原因,您认为
int* n=(int*)malloc(1000*sizeof(int));
cin>>*n;
将读取一个数字,并将每个数字放入动态数组n
的不同元素中。如果发生这种情况,那么您的其余代码将正常工作。但是,当然不是。取而代之的是,将读取的数字放入*n
(或同一事物,n[0]
)中,而其余的动态数组元素未初始化,这说明了您看到的垃圾值。
我正在努力理解为什么您认为您的代码可能会以您想要的方式运行。我想您只是一个乐观的人,并认为如果您足够努力地希望编译器能够理解。这似乎是初学者之间非常普遍的态度。不幸的是编程不是那样的。