将int放入数组c++中

putting ints into an array c++

本文关键字:c++ 数组 int      更新时间:2023-10-16

这是一个超级简单的问题,但为时已晚,我一辈子都不明白为什么这个函数不起作用。我希望它打印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;
}

因此,此代码可以帮助您查找不太大的数字。它适用于正数、负数和零。