变量具有值而不被赋予C++

use*_*002 5 c++ variables

#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;
  }
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个计算给定数字位数的小程序.
每当我输入类似200预期结果的数字时3.相反,我得到了7963.当我在该行放置一个断点时,number_placement我得到的默认值7961很奇怪,因为该值未在代码中的任何位置分配.

你能解释一下为什么我得到那个结果吗?

Aru*_*A S 5

只需将您的功能更改为

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;
  }
Run Code Online (Sandbox Code Playgroud)

也就是说,改变

int number_placement;
Run Code Online (Sandbox Code Playgroud)

int number_placement = 0; 
Run Code Online (Sandbox Code Playgroud)

如果您尝试访问未初始化的变量,您将获得垃圾值,因为它是未定义的行为.编译器只会给它一些垃圾值.

此链接可能有用

在C中声明的未初始化变量会发生什么?它有价值吗?