2015-04-30 116 views
1

我正在制作一个程序来将体重和身高从公制转换为美国,反之亦然。我成功完成了高度部分,但具有重量的部分给我一个运行时错误,即堆栈周围的变量已损坏。堆栈周围的变量已损坏。 C visual studio

我知道发生在数组中,因为当我谷歌问题时,我得到的就是这些,但这是在2个不同函数中发生的一个常规整数变量。

这是调用其它函数来转换重量的功能,一个用于输入,一个是转换和一个用于输出:

void weight_to_metric(void){ 

    int kilograms, pounds; 

    double grams, ounces; 

    int * pkilograms= &kilograms, *ppounds=&pounds; 

    double * pgrams=&grams, *pounces=&ounces; 


    input_us_weight(ppounds, pounces); 

    weight_us_to_metric(ppounds, pounces, pkilograms, pgrams); 

    output_metric_weight(pkilograms, pgrams); 

} 

这是输入

void input_us_weight(int* feet, double * inches){ 
    printf("enter the number of pounds you want to convert: "); 

    scanf(" %lf", feet, "\n"); 

    printf("enter the number of ounces you want to convert: "); 

    scanf(" %lf", inches, "\n"); 

} 
功能

这是转换的功能

void weight_us_to_metric(int* pounds, double* ounces, int* kilograms, double * grams){ 

    double temp_kilograms; 
    *kilograms = *pounds/2.2046 + ((*ounces/16)/2.2046); 

    temp_kilograms = *pounds/2.2046 + ((*ounces/16)/2.2046); 
    *ounces = ((temp_kilograms - *kilograms) *2.2046)*16; 

    *grams = ((*ounces/16.0)/2.2046) * 1000; 
} 

输出功能不甚至处理腐败的变量。腐败的变量是磅。在初始变量中声明的整数磅。

我该如何解决这个问题?

回答

3

您在您的scanf之一中使用错误的格式说明符。当扫描double时,扫描int%lf时使用%d。更改

scanf(" %lf", feet, "\n"); 

scanf("%d", feet); 

此外,删除您传递给scanf S中的第三个参数("\n")。这个不成立。

相关问题