#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很奇怪,因为该值未在代码中的任何位置分配.
你能解释一下为什么我得到那个结果吗?
只需将您的功能更改为
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)
如果您尝试访问未初始化的变量,您将获得垃圾值,因为它是未定义的行为.编译器只会给它一些垃圾值.
此链接可能有用