2013-10-22 47 views
-1

据我所知,我没有使用多个操作符,但我无法让我的程序工作。获取无效操作数为二进制+以及以前的错误错误

我很确定我有我的功能正常,除了可能的通话,但我不知道如何将其应用于特定的代码。

#include<stdio.h> 

void inputTotalSales(float *); 
void calculateTaxes(float *, float *, float *, float *); 
void displayTaxes(float *, float *, float *); 

int main() 
{ 
float totalSales, salesTax, stateTax, countyTax; 

    inputTotalSales(& totalSales); 
    calculateTaxes(&totalSales, & salesTax, & stateTax, & countyTax); 
    displayTaxes(& salesTax, &stateTax, &countyTax); 

    return 0; 
} 

void inputTotalSales(float *totalSalesp) 
{ 
     printf("Please enter your total sales for the month: "); 
     scanf("%f", totalSalesp); 
     printf("\nYour monthly sales total is %.2f", *totalSalesp); 

} 

void calculateTaxes (float *totalSalesp, float *salesTaxp, float *stateTaxp,float  *countyTaxp) 
{ 
    salesTaxp = (totalSalesp * .06); 
    stateTaxp = (totalSalesp * .04); 
    countyTaxp = (totalSalesp * .02); 
} 

void displayTaxes (float salesTax, float stateTax, float countyTax) 
{ 
    printf("\nYour monthly sales tax is %.2f.", salesTax); 
    printf("\nYour monthly state tax is %.2f.", stateTax); 
    printf("\nYour monthly county tax is %.2f.", countyTax); 
} 

此外,任何你可以推荐的书都会很棒!我的老师从来没有一本他喜欢的书,所以我们从来没有分配过一本书......而我正在挣扎。任何其他好的网站,以及将不胜感激!

回答

0

有在你的代码

1)calculateTaxes功能的一些问题您正在传递指针,并且您试图将指针与数字相乘,而应该将这些指针的值乘以数字。

2)您已经使用指针(float *)声明了displayTaxes,并且定义了您正在使用不同声明的函数,但仅使用了float。

这里是没有这些问题的代码:

void inputTotalSales(float *); 
void calculateTaxes(float *, float *, float *, float *); 
void displayTaxes(float , float , float); 
int main() 
{ 

float totalSales, salesTax, stateTax, countyTax; 

    inputTotalSales(& totalSales); 
    calculateTaxes(&totalSales, & salesTax, & stateTax, & countyTax); 
    displayTaxes(salesTax, stateTax, countyTax); 

return 0; 
} 



void inputTotalSales(float *totalSalesp) 
{ 
    printf("Please enter your total sales for the month: "); 
    scanf("%f", totalSalesp); 
    printf("\nYour monthly sales total is %.2f", *totalSalesp); 

} 

void calculateTaxes (float *totalSalesp, float *salesTaxp, float *stateTaxp,float  *countyTaxp) 
{ 
    *salesTaxp = (*totalSalesp * .06); 
    *stateTaxp = (*totalSalesp * .04); 
    *countyTaxp = (*totalSalesp * .02); 
} 


void displayTaxes (float salesTax, float stateTax, float countyTax) 
{ 
    printf("\nYour monthly sales tax is %.2f.", salesTax); 
    printf("\nYour monthly state tax is %.2f.", stateTax); 
    printf("\nYour monthly county tax is %.2f.", countyTax); 
} 
-1

您正在将指针传递给您的函数,但不是对它们进行解引用。

为了访问float * totalSalespfloat,您需要取消引用:*totalSalesp

您可以记住这一点:您需要尽可能多的星号才能找到类型中存在的内容。

0

首先,你的原型:

void displayTaxes(float *, float *, float *); 

不符合您的函数定义:

void displayTaxes (float salesTax, float stateTax, float countyTax) 
{ 
... 
} 

我建议改变你的原型来匹配你的函数定义。这将允许你当前的调用方法如(或函数def。匹配原型,只要它们是相同的,但在调用时必须通过指针)

函数inputTotalSales scanf函数中存在类型不匹配。创建一个局部变量,扫描值,然后进行分配:更改inputTotalSales()看起来像这样:

void inputTotalSales(float *totalSalesp) 
{ 
     float x=0; 
     printf("Please enter your total sales for the month: "); 
     scanf("%f", &x); 
     *totalSalesp = x; 
     printf("\nYour monthly sales total is %.2f", *totalSalesp); 

} 

而且,你想有一个指针传递后赋值给变量本身在这个函数,然后传回指针,没有改变它。为了解决这个问题,更改calculateTaxes()看起来像这样:

void calculateTaxes (float *totalSalesp, float *salesTaxp, float *stateTaxp,float  *countyTaxp) 
{ 
    *salesTaxp = (*totalSalesp * .06); 
    *stateTaxp = (*totalSalesp * .04); 
    *countyTaxp = (*totalSalesp * .02); 
} 

最后,在main(),最后一行,需要的displayTaxes()参数改变以匹配原型(即浮动,不会漂浮*)。更改main()看起来像这样:

int main() 
{ 
    float totalSales, salesTax, stateTax, countyTax; 

    inputTotalSales(&totalSales); 
    calculateTaxes(&totalSales, & salesTax, & stateTax, & countyTax); 
    displayTaxes(salesTax, stateTax, countyTax); //passing by value, not by reference, to match original prototype. 

    return 0; 
} 

总结这里是有问题的一个示例中删除:

#include<stdio.h> 

void inputTotalSales(float *); 
void calculateTaxes(float *, float *, float *, float *); 
void displayTaxes (float salesTax, float stateTax, float countyTax); 


int main() 
{ 
    float totalSales, salesTax, stateTax, countyTax; 

    inputTotalSales(&totalSales); 
    calculateTaxes(&totalSales, &salesTax, &stateTax, &countyTax); 
    displayTaxes(salesTax, stateTax, countyTax); 

    return 0; 
} 

void inputTotalSales(float *totalSalesp) 
{ 
     float x=0; 
     printf("Please enter your total sales for the month: "); 
     scanf("%f", &x); 
     *totalSalesp = x; 
     printf("\nYour monthly sales total is %.2f", *totalSalesp); 

} 

void calculateTaxes (float *totalSalesp, float *salesTaxp, float *stateTaxp,float  *countyTaxp) 
{ 
    *salesTaxp = (*totalSalesp * .06); 
    *stateTaxp = (*totalSalesp * .04); 
    *countyTaxp = (*totalSalesp * .02); 
} 


void displayTaxes (float salesTax, float stateTax, float countyTax) 
{ 
    printf("\nYour monthly sales tax is %.2f.", salesTax); 
    printf("\nYour monthly state tax is %.2f.", stateTax); 
    printf("\nYour monthly county tax is %.2f.", countyTax); 
} 
-1

这次演习(大概)的目的是教你如何在C

理解和使用指针

你已经发布的代码有一个大量的错误。

您的声明和实现displayTaxes的原型是不同的。编译器会抱怨这一点,它们必须相同。因此,例如:

void displayTaxes(float *, float *, float *); 

应该是一样的实现进一步下跌:

void displayTaxes(float, float, float); 

在calculateTaxes功能你不取消引用指针,所以你是一个想多一个指针浮动(这在C中是不允许的)。相反,您必须取消引用totalSalesp以获取该值,然后通过浮点数对该值进行多重处理;然后再次尝试将该值分配给指针,而不是指针指向的值。如此反复,这些指针必须被取消引用来分配自己的价值:

void calculateTaxes (float *totalSalesp, float *salesTaxp, float *stateTaxp, 
     float *countyTaxp) 
{ 
    *salesTaxp = (*totalSalesp * .06); 
    *stateTaxp = (*totalSalesp * .04); 
    *countyTaxp = (*totalSalesp * .02); 
} 

致电时displayTaxes你也想解引用变量不是指针!因此调用,而不是只调用没有任何提领:

displayTaxes(*salesTax, *stateTax, *countyTax); 

成为

displayTaxes(salesTax, stateTax, countyTax); 

使修复后,您就结了:

#include <stdio.h> 

void inputTotalSales(float *); 
void calculateTaxes(float *, float *, float *, float *); 
void displayTaxes(float, float, float); 


int main() 
{ 
    float totalSales, salesTax, stateTax, countyTax; 

    inputTotalSales(&totalSales); 
    calculateTaxes(&totalSales, &salesTax, &stateTax, &countyTax); 
    displayTaxes(salesTax, stateTax, countyTax); 

    return 0; 
} 

void inputTotalSales(float *totalSalesp) 
{ 
    printf("Please enter your total sales for the month: "); 
    scanf("%f", totalSalesp); 
    printf("\nYour monthly sales total is %.2f", *totalSalesp); 
} 

void calculateTaxes (float *totalSalesp, float *salesTaxp, float *stateTaxp, 
     float *countyTaxp) 
{ 
    *salesTaxp = (*totalSalesp * .06); 
    *stateTaxp = (*totalSalesp * .04); 
    *countyTaxp = (*totalSalesp * .02); 
}  


void displayTaxes (float salesTax, float stateTax, float countyTax) 
{ 
    printf("\nYour monthly sales tax is %.2f.", salesTax); 
    printf("\nYour monthly state tax is %.2f.", stateTax); 
    printf("\nYour monthly county tax is %.2f.", countyTax); 
} 

,这给你想要的最有可能的结果:

Please enter your total sales for the month: 564 

Your monthly sales total is 564.00 
Your monthly sales tax is 33.84. 
Your monthly state tax is 22.56. 
Your monthly county tax is 11.28. 

如果你想得到一本关于C的主题的书,只需要获得Kernighan和Ritchie的书:The C Programming Language

+0

非常感谢,我现在几乎觉得你们解释它哈哈,感谢你的书和网站建议! – Jnr

相关问题