【问题标题】:makes pointer to integer without cast使指针指向整数而不进行强制转换
【发布时间】:2015-01-19 01:13:46
【问题描述】:

我的代码有点问题。编译器告诉我,我的代码正在创建一个指向没有强制转换的整数的指针。现在我不熟悉这意味着什么,所以也许有人可以指出(双关语非常有意)我在正确的方向。任何一般提示也将不胜感激!

确切的错误是:

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

 }

【问题讨论】:

  • 我在编译时遇到的错误比这更多。
  • 还有很多错误。我不希望人们为我完成我的整个代码,只需要帮助修复该错误哈哈
  • 您已经定义 add 将整个数组作为其第一个参数,但随后您将其称为仅传递一个元素(这也在数组范围之外——另一个问题) .
  • 现在我将整个数组发送到函数中,该错误已清除,但我现在收到此错误:Homework3.c:41: error: expected ')' before '[' token Homework3.c:56: 错误: '[' token 之前的预期')'

标签: c arrays pointers


【解决方案1】:

sales[SALESPERSON][PRODUCTS] 返回salesSALESPERSON 位置引用的数组的PRODUCTS 位置整数。你只需要通过sales:

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

你也没有给出函数数组的长度,所以你的定义应该是:

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

【讨论】:

  • 原型定义会是什么样子?
  • 也从这样做我现在得到这个错误 Homework3.c:41: error: expected ')' before '[' token Homework3.c:56: error: expected ')' before '[ '令牌
  • @TheMadHouse 原型应始终与函数定义匹配。唯一的区别应该是末尾的分号。
猜你喜欢
  • 2021-01-19
  • 1970-01-01
  • 2023-02-08
  • 2011-05-10
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多