簡體   English   中英

將整數放入數組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正確解釋了為什么會有這樣的輸出。 您的功能存在錯誤。 我寫了另一個。

您可以使用下一個代碼,這有助於查找數字位數。

#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;
}

因此,此代碼可以幫助您查找數字不大的數字。 它適用於正數,負數和零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM