2013-10-22 2 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 기능에 몇 가지 문제가 있습니다 : 요약

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; 
} 

여기 제거 문제가있는 예입니다 당신은 포인터를 전달하고 포인터를 숫자로 곱하려고 시도하지만 대신이 포인터의 값을 번호.

2) 포인터 (float *)로 displayTaxes를 선언했으며 부동 소수점으로만 다른 선언을 사용하는 함수를 정의했습니다.

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 (float * totalSalesp)에 액세스하려면 *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()는 다음과 같이보고 : main()에 마지막으로

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

, 마지막 줄을 displayTaxes()의 인수 (* 떠, 즉 플로트를하지 않음) 프로토 타입을 일치하도록 변경해야합니다. 이처럼 보이도록 main() 변경 :

#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 선언 및 구현의 프로토 타입이 다릅니다. 컴파일러는 이것에 대해 불평 할 것이고, 그들은 동일해야합니다. 당신은 여러 포인터하려고하는, 그래서 calculateTaxes에서

void displayTaxes(float, float, float); 

이 기능을 사용하면 포인터를 역 참조하지 않을 : 그래서 예를 들면 :

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

더 아래로 구현과 동일해야 float (C에서는 허용되지 않음). 대신 totalSalesp의 참조를 해제하여 값을 가져와야합니다.이 값을 float로 곱하면됩니다. 이 값은 포인터가 가리키는 값이 아니라 포인터에 다시 할당하려고 시도합니다. 그래서 다시,이 포인터는 자신의 값을 할당하기 위해 역 참조해야합니다 당신은 또한 포인터없는 역 참조 변수에 노력하고

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 and Ritchie 서적을 얻으십시오 : The C Programming Language

+0

정말 고마워요. 여러분이 하하 그것을 설명하고 나면, 거의 바보가되어 버렸습니다. 책과 웹 사이트에 감사드립니다. 제안! – Jnr

관련 문제