变量未初始化的功能

时间:2015-09-18 06:22:31

标签: c initialization

我的任务是编写一个程序,它接受三个输入并返回三个值。整个程序在这里:

#include <stdio.h>


    int findPercent(int percent)
    {
    int p = percent / 100;
    return p;
    }

    double convertSquareYards(int a)
    {
    double sy = a * 4840;
    return sy;
    }

    double convertCubicYards(double sy, double i, int p)
    {
    double cy = (sy * p) * (i / 36);
    return cy;
    }

    double convertGallons(double cy)
    {
    double g = cy / 201.974026;
    return g;
    }

    double convertPounds(double g)
    {
    double lb = g / 8.3430;
    return lb;
    }

    double convertTonnes(double lb)
    {
    double t = lb / 2000;
    return t;
    }

    double convertCubicFeet(double cy)
    {
    double cf = cy * 27;
    return cf;
    }

    double findHeight(double cf)
    {
    double h = ((cf / (360 * 160)) / 5280);
    return h;
    }

    int main(void)
    {

    double g, t, h, lb, i, cy, a, percent, cf;

    printf("What is the size of the county in acres? ");
    scanf("%lf", &a);

    printf("How much rainfall was recieved, in inches? ");
    scanf("%lf", &i);

    printf("What percent of the county recieved rainfall? ");
    scanf("%lf", &percent);


    g = convertGallons(cy);
    t = convertTonnes(lb);
    h = findHeight(cf);

    printf("%lf gallons fell in the county.\n", g);
    printf("The rainfall weighed %lf tonnes.\n", t);
    printf("The height of the football field is %lf miles.\n", h);

    return 0;
    }

当我尝试编译此程序时,我收到以下错误:

project.c:67:3: warning: ‘cy’ is used uninitialized in this function [-Wuninitialized]
g = convertGallons(cy);
  ^
project.c:68:3: warning: ‘lb’ is used uninitialized in this function [-Wuninitialized]
t = convertTonnes(lb);
  ^
project.c:69:3: warning: ‘cf’ is used uninitialized in this function [-Wuninitialized]
h = findHeight(cf);
  ^

我确定这个节目有很多问题(这是我的第一个真正的节目),如果你喜欢我喜欢听到任何额外的输入。先感谢您。

3 个答案:

答案 0 :(得分:1)

在这种情况下,警告很具描述性;你在初始化之前使用变量,这在C中并不是一个好主意。例如

 g = convertGallons(cy);

cy在上面使用之前未初始化。使用

double cy = 0; // Or some other initial value
声明期间

(其他变量相同)。读取未初始化变量的值(这是当该变量传递给函数时发生的事情 - 它的副本,因此在某种程度上是读取)是未定义的行为,似乎编译器是抱怨这个。

答案 1 :(得分:0)

因为变量已声明但未初始化为任何值(它们可以包含任何值)。您可能需要执行某些计算以将它们初始化为某些值,然后将它们传递给函数。

即。 Amount of rainfall = area * inches of rainfall等等。

cy = a * (percent/100.0) * i ; 
/*calculates the volume of rainfall in acres * inches unit and provided you
  took percentage as 56% and not 0.56 (in which case, remove the division by 100.0)*/

答案 2 :(得分:0)

考虑这部分代码:

printf("What is the size of the county in acres? ");
scanf("%lf", &a);

printf("How much rainfall was recieved, in inches? ");
scanf("%lf", &i);

printf("What percent of the county recieved rainfall? ");
scanf("%lf", &percent);


g = convertGallons(cy);
t = convertTonnes(lb);
h = findHeight(cf);

假设您希望根据输入的值计算。但是,此代码会为aipercent分配一个值,同时将未初始化的变量cylbcf提供给您的计算功能

因此,我进一步假设存在基本关于变量如何工作以及它们的范围是什么的误解。您在块内声明的变量(一对{})仅存在于此块内。程序中可能存在其他变量,其他块中的同名 - 它们不同且完全不相关。

特别是,函数的参数也是局部变量,并且只在该函数内有效。

所以,例如,代码中的cy

double convertGallons(double cy)
{
    double g = cy / 201.974026;
    return g;
}

是一个完全不同于cy的变量:

int main(void)
{

    double g, t, h, lb, i, cy, a, percent, cf;
cy中的{p> main如果要执行convertGallons(cy),则需要有值 - 然后函数调用会在{{1}中指定cy的值转到main()中的cy。为了更好地理解这一点,尝试给这些变量赋予不同的名但是,当然,同名并不是错误,在某些情况下它很常见。