由于变量本地而非全局而导致的运行时错误

时间:2016-04-17 01:20:37

标签: c++ visual-studio visual-studio-2015 runtime-error

以下代码要求用户选择形状,输入所述形状的尺寸,并显示其体积。

当我运行代码时,我得到以下输出,显示结果不是数字(NaN):enter image description here

我意识到这必须与我的变量本地不是全局的事实有关,并且以下函数调用:

 @Override
public void onResume() {
    super.onResume();
    final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
}

未传递所需数据。试图绕过这个并将变量放在正确的位置但无济于事,我是使用任何形式的编码语言的初学者,并发现整个程序相当难以创建。

我已经发布了一个类似的问题,但是这个问题要详细得多,如果有人能说明我如何修改变量的位置以便程序正确运行我将非常感激。谢谢。

完整的代码是:

choice = ReadInputShapeChoice();
readshapedimension(choice);
result = CalculateBasicVolume(choice);

2 个答案:

答案 0 :(得分:1)

你在你的职能范围内重新宣布;这导致函数使用它们的本地值而不是全局变量,作为一个例子,我已经注释了reshapedimensions函数中的重新声明:

// This is our global declaration
double height, width, length, radius, base_area, result;

void readshapedimension(int choice)
{
    switch (choice)
    {
    case 1:
    {
        // Take out our local declarations
        // Otherwise cin below will write to the local and these values
        // will subsequently be lost when the function exits
        //int length, width, height;
        cout << "You have chosen rectuangular solid" << endl;
        cout << "Enter the values for length width and height" << endl;
        cin >> length >> width >> height;
        break;
    }
    case 2:
    {
        //int radius, height;
        cout << "You have chosen cylinder" << endl;
        cout << "Enter the values for radius and height" << endl;
        cin >> radius >> height;
        break;
    }
    case 3:
    {
        //int radius, height;
        cout << "You have chosen cone" << endl;
        cout << "Enter the values for radius and height" << endl;
        cin >> radius >> height;
        break;
    }
    case 4:
    {
        //int radius;
        cout << "You have chosen sphere" << endl;
        cout << "Enter the radius" << endl;
        cin >> radius;
        break;
    }
    case 5:
    {
        //int height, base_area;
        cout << "You have chosen square based pyramid" << endl;
        cout << "Enter height and area of the base" << endl;
        cin >> height >> base_area;
        break;
    }
    }
}

但是,我注意到您在函数中使用int并在全局声明中使用double;如果这是故意的,你需要在某处包含转换并将结果存储回全局。

保持全球名称的独特性是个好主意,这样你就不会让他们与当地人混淆;常用技巧是使用ALLCAPS或前缀,例如glob_myvar

答案 1 :(得分:0)

您正在重新定义结果变量。

在文件的顶部,您声明它;

double result;

但是你永远不会初始化它,而是稍后重新定义它并将你要打印的值放在这个新变量中;

float CalculateBasicVolume(int choice)
{
    switch (choice)
    {
        int result;

您稍后打印的变量是未初始化的double,而不是实际包含圆锥体积的int。