2015-04-08 18 views
5
#include <iostream> 
#include <string> 


using namespace std; 

int count_number_place(int number) 
    { 

    int number_placement; 

    while (number >= 1) 
    { 
     number_placement++; 
     cout << number_placement <<endl; 
     number/=10; 
    } 

    return number_placement; 
    } 



int main(int argc, const char * argv[]) 
    { 
    // insert code here... 

    int user_input_number; 

    cout << "Please enter your number here" << endl; 
    cin >> user_input_number; 
    cout << "User input number is "<< user_input_number <<endl; 
    cout << "The numbers of digits in the input number is :" << count_number_place(user_input_number) << endl; 

    return 0; 
    } 

Belirli bir sayının basamak sayısını hesaplayan küçük bir program oluşturmaya çalışıyorum.
200 gibi sayıları yazdığımda beklenen sonuç 3. Onun yerine 7963 aldım. number_placement satırında bir kesme noktası koyduğumda, varsayılan değeri 7961 aldım, bu da garip çünkü bu değer kodun herhangi bir yerine atanmadı.Değişken, atanan değere sahip değil C++

Bu sonucu neden aldığımı açıklayabilir misiniz?

+3

'int number_placement = 0;' Hiçbir zaman başlatılamıyorsunuz, bu yüzden bazı çöp değerleriyle başlıyor. – BoBTFish

+0

Sadece atanmamış değerler olmadan atanan belleğe atanmamış çöp yığını, – EdChum

+1

çöpüne başlayacaktır BobTFish, değişkeni hiçbir zaman başlatılamayacağına işaret ettiğinden, burada ne bekliyorsunuz? – EdChum

cevap

5

Sadece çöp değerleri buna çünkü alacak,

olduğunu
int count_number_place(int number) 
    { 

    int number_placement = 0;   // assign 0 

    while (number >= 1) 
     { 
     number_placement++; 
     cout << number_placement <<endl; 
     number/=10; 
     } 

    return number_placement; 
    } 

için işlevini değiştirmek için, başlatılmamış değişkenleri erişmeye çalışırsanız

int number_placement; 

için

int number_placement = 0; 

değiştirmek tanımlanmamış davranıştır. Derleyici, bazı çöp değerlerini verir.

Bu bağlantı,

What happens to a declared, uninitialized variable in C? Does it have a value? Program derlenmiştir

3

, (bu durumda, number_placement olarak) oluşturmuş değişken, bellekte kendisine tahsis miktar bellek alanını (bir pozisyon alacaktır yararlı olabilir bir adresi olan). Bu adrese erişmeye çalışırsanız (bahsettiğim bu alan) ve daha önce hiç bir şey atamadıysanız, orada kalanları okuyacaksınız, geçerli değeri. Buna çöp diyoruz, çünkü bu bellek konumunu daha önce kullanmış olabilecek başka bir uygulamadan kalan bellek ya da bellek açıldığından beri daha önce atanmış herhangi bir değere sahip olmayan bazı bellekler (veya bozuk çünkü) bellek kullanılmadığı için bu konumu yenilemedi).

Her zaman değişkenlerinizi başlatın.

Ve bununla kastediyorum: Daha önce bir değer atamadığınız değişkenlerden değerleri okuma. Eğer sıfırdan sizin sayacını başlatmak istiyorsanız Senin durumunda

, birden sıfırdan ile initialize olmalıdır:

int number_placement = 0; 

(bunu bir arttırılarak senin durumunda) erişirken önce.

İlgili konular