2015-04-08 7 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; 
    } 

Ich versuche, ein kleines Programm zu erstellen, das die Anzahl der Ziffern einer bestimmten Zahl berechnet.
Immer wenn ich Zahlen wie 200 eintippe, sind die erwarteten Ergebnisse 3. Stattdessen habe ich 7963. Als ich einen Haltepunkt an der Linie number_placement setzte, erhielt ich einen Standardwert von 7961, der seltsam ist, weil dieser Wert nirgends im Code zugewiesen wurde.Variable hat Wert, ohne zugewiesen zu werden C++

Können Sie bitte erklären, warum ich das Ergebnis bekomme?

+3

'int number_placement = 0;' Sie initialisieren es nie, daher beginnt es mit einem Wert für den Wert "Müll". – BoBTFish

+0

Das ist nur unintialized Müll Speicher zugewiesenen Speicher ohne explizite zugewiesene Werte werden auf Müll initialisiert werden – EdChum

+1

Wie BobFish hat darauf hingewiesen, dass Sie die Variable nie initialisieren, also was erwarten Sie hier? – EdChum

Antwort

5

Ändern Sie einfach Ihre Funktion

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

Das heißt, ändern

int number_placement; 

zu

int number_placement = 0; 

Wenn Sie versuchen, nicht initialisierte Variablen zuzugreifen, werden Sie Müll Werte, weil es bekommen ist undefiniertes Verhalten. Der Compiler wird nur einige Müllwerte geben.

könnte Dieser Link

What happens to a declared, uninitialized variable in C? Does it have a value?

3

Wenn das Programm kompiliert wird, wird die Variable (in diesem Fall number_placement) erstellt nützlich sein wird, um Speicherplatz zu zugeordnet hat (eine Position im Speicher, welches eine Adresse hat). Wenn Sie versuchen, auf diese Adresse zuzugreifen (diesen Bereich, über den ich gesprochen habe), und Sie ihm vorher noch nichts zugewiesen haben, werden Sie lesen, was dort übrig geblieben ist, es ist der aktuelle Wert. Wir nennen es Müll, weil es Restspeicher von einer anderen Anwendung ist, die diese Speicherposition zuvor hätte verwenden können, oder nur etwas Speicher, dem kein Wert zugewiesen wurde, seit der Speicher eingeschaltet war (oder weil er beschädigt wurde der Speicher hat diese Position nicht aktualisiert, da sie nicht verwendet wurde).

Initialisieren Sie immer Ihre Variablen.

Und damit meine ich: Lesen Sie nicht Werte von Variablen, denen Sie zuvor keinen Wert zugewiesen haben.

int number_placement = 0; 

es Vor dem Zugriff (in Ihrem Fall, es erhöht wird):

In Ihrem Fall, wenn Sie von Null Ihren Zähler starten wollen, sollten Sie es mit Null initialisiert werden.

Verwandte Themen