将int放入数组c++中
putting ints into an array c++
这是一个超级简单的问题,但为时已晚,我一辈子都不明白为什么这个函数不起作用。我希望它打印1234,但它却打印123121。有人能解释一下发生了什么以及如何解决吗?感谢
#include <iostream>
const int size = 20;
void set_int( int num )
{
int digits[size];
for ( int i = size - 1; i >= 0; i-- )
{
digits[i] = num % 10;
num /= 10;
if ( num != 0 )
std::cout << num;
}
}
int main()
{
set_int( 1234 );
return 0;
}
输出的是数字,而不是数字。
尝试更改,如
cout << digits[i]
Further clarification :
在循环的第一次运行中,您的编号将是1234 / 10 = 123
下一次运行您的号码将是123 / 10 = 12
下一个是1
你正在输出num,所以你得到了123121
。
该代码有几个错误。
首先,的定义
int digits[size];
是一个可变长度数组,它是有效的C(自1999年C标准以来),但不是有效的C++。不幸的是,有些C++编译器支持这样的扩展。
其次,即使我们假设定义是有效的,您的代码本质上是在说明您需要一个包含1234个元素的数组来保存对应于四位数字(1、2、3和4)的整数值。
正如MichaelCMS所描述的,您的代码也在输出数字以外的内容。1234值有4位数字,因此您需要循环总共4次才能找到所有数字(如果操作正确的话)。您不需要循环1234次。
MichaelCMS正确解释了为什么会有这样的输出。你的功能有错误。我又写了一本。
您可以使用next代码,这有助于查找数字的位数。
#include <iostream>
int FindNumberOfDigits(int number);
void SplitNumberIntoDigits(int number);
// Splits number into digits.
// Works with not big numbers.
void SplitNumberIntoDigits(int number)
{
int size = FindNumberOfDigits(number);
int * digits = new int[size];
int divider = 0;
int degree = 0;
for(int digit = size; digit > 0; digit --)
{
// Find degree of divider
degree = digit;
// Find divider for each digit of number.
// For 1234 it will be 1000. For 234 it will be 100.
divider = pow(10, degree - 1);
// We use "abs" to get digits without "-".
// For example, when -1234 / 1000, you get -1.
digits[digit] = abs(number / divider);
// Cut number to find remaining digits.
number %= divider;
std::cout << digits[digit];
}
std::cout << std::endl;
}
// If number = 0, number of digits will be 1.
// Else returns number of digits.
int FindNumberOfDigits(int number)
{
int digitsNumber = 0;
if (number)
{
// calculates number of digits
while (number / 10)
{
number /= 10;
digitsNumber ++;
}
}
digitsNumber += 1;
return digitsNumber;
}
int _tmain(int argc, _TCHAR* argv[])
{
SplitNumberIntoDigits(1234);
SplitNumberIntoDigits(0);
SplitNumberIntoDigits(1);
SplitNumberIntoDigits(-1234);
SplitNumberIntoDigits(1234567890);
return 0;
}
因此,此代码可以帮助您查找不太大的数字。它适用于正数、负数和零。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '