2014-11-21 3 views
1

제 코드에 약간의 문제가 있습니다. 컴파일러는 내 코드가 캐스트없이 정수에 대한 포인터를 만들고 있음을 알려줍니다. 이제 나는 이것이 무엇을 의미하는지 잘 모르겠다. 그래서 누군가가 나를 올바른 방향으로 향하게 할 수있을 것이다. 또한 일반적인 팁을 많이 주시면 감사하겠습니다!은 캐스트없이 정수를 가리키는 포인터를 만듭니다.

정확한 오류는 다음과 같습니다

Homework3.c: In function ‘main’: 
Homework3.c:32: warning: passing argument 1 of ‘add’ makes pointer from integer without a cast 
Homework3.c:16: note: expected ‘int (*)[5]’ but argument is of type ‘int’ 

#include <stdio.h> 
#include <stdlib.h> 
#define INPUT_FILE_NAME "amounts.txt" 
#define PRODUCTS 5 
#define SALESPERSON 4 
#define AMOUNT 1449 
#define TOTALS 20 

void printOut(int [SALESPERSON][PRODUCTS], float [TOTALS]); 
float add(int [SALESPERSON][PRODUCTS], float, float [TOTALS]); 

int main(void){ 

    FILE *inputFile; 
    int sales[SALESPERSON][PRODUCTS]; 

    float data = 0.0; 
    float totals[TOTALS]; 
    int count; 

    inputFile = fopen(INPUT_FILE_NAME, "r"); 
    for (count = 0; count < AMOUNT; count++){ 
     fscanf(inputFile, "%d", sales[SALESPERSON]); 
     fscanf(inputFile, "%d", sales[SALESPERSON][PRODUCTS]); 
     fscanf(inputFile, "%f", &data); 
     add(sales[SALESPERSON][PRODUCTS], data, totals[TOTALS]); 
    } 
    fclose(inputFile); 

    printOut(sales[SALESPERSON][PRODUCTS], totals[TOTALS]); 

    return 0; 
} 

void printOut(sales[SALESPERSON][PRODUCTS], totals[TOTALS]){ 

    int count2 = 0; 
    int count3 = 0; 
    int count4 = 0; 

    for(count2 = 0; count2 < SALESPERSON; count2++){  
     for(count3 = 0; count3 < PRODUCTS; count3++){ 
      printf("Sales Person %d \t Product%d \t Total: %.2f\n", count2, count3, totals[count4]); 
      ++count4; 
     } 
    } 
    return ; 
} 

void add(sales[SALESPERSON][PRODUCTS], data, totals[TOTALS]){ 


    if(sales[SALESPERSON] == 1){ 
     if(sales[SALESPERSON][PRODUCTS] == 1){ 
      totals[0] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 2){ 
      totals[1] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 3){ 
      totals[2] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 4){ 
      totals[3] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 5){ 
      totals[4] += data; 
     } 
    } 
    else if(sales[SALESPERSON] == 2){ 
     if(sales[SALESPERSON][PRODUCTS] == 1){ 
      totals[5] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 2){ 
      totals[6] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 3){ 
      totals[7] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 4){ 
      totals[8] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 5){ 
      totals[9] += data; 
     } 
    } 
    else if(sales[SALESPERSON] == 3){ 
     if(sales[SALESPERSON][PRODUCTS] == 1){ 
      totals[10] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 2){ 
      totals[11] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 3){ 
      totals[12] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 4){ 
      totals[13] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 5){ 
      totals[14] += data; 
     } 
    } 
    else if(sales[SALESPERSON] == 4){ 
     if(sales[SALESPERSON][PRODUCTS] == 1){ 
      totals[15] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 2){ 
      totals[16] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 3){ 
      totals[17] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 4){ 
      totals[18] += data; 
     } 
     else if(sales[SALESPERSON][PRODUCTS] == 5){ 
      totals[19] += data; 
     } 
    } 

} 
+1

때를 그것을 컴파일하십시오. –

+0

더 많은 오류가 있습니다. 나는 내 전체 코드를 수행하는 사람들이 저에게 오류를 수정하는 데 도움이 필요하기를 원합니다. 하하 – TheMadHouse

+1

전체 배열을 첫 번째 인수로 사용하기 위해'add'를 정의했지만, 하나의 요소 만 전달하면됩니다. 배열의 범위 밖에있다 - 또 다른 문제). –

답변

2

sales[SALESPERSON][PRODUCTS]sales에 위치 SALESPERSON에서 참조하는 배열의 위치 PRODUCTS의 정수를 반환합니다. 당신은 sales 전달해야합니다

add(sales, data, totals); //same thing with totals 

당신은 또한 함수의 배열의 길이를주지 않는다, 당신의 정의 그냥해야하므로 : 그보다 더 많은 오류를 얻을

void add(int[][] sales, float data, float[] totals) 
+0

프로토 타입 정의는 어떻게 생겼을까요? – TheMadHouse

+0

또한이 작업을 수행함에 따라이 오류가 발생합니다. Homework3.c : 41 : 오류 : 예상 ')'토큰 '전에'[ '토큰 Homework3.c : 56 : 오류 : 예상 됨') '토큰'보다 전에 – TheMadHouse

+0

@TheMadHouse 프로토 타입은 항상 함수 정의와 일치해야합니다. 유일한 차이점은 끝에 세미콜론이어야합니다. – user3386109

관련 문제