簡體   English   中英

為什么 printf 沒有顯示

[英]why does the printf not showing

我需要幫助。 它不顯示平均 function 中的 printf。 我正在 c 中進行動態分配,添加 function 有效,但平均值 function 不顯示。 添加 function 沒有問題,但最大值沒有。 很抱歉,我知道這個問題很簡單,但仍然無法得到答案。 在主調用期間,我也收到了關於添加 function 的警告。

這是我的代碼:

typedef int* Statistician;

void add(Statistician answer, int *count, int *SIZE, int item);
                      |
                      [Note] expected 'Statistician' {aka 'int *'} but argument is of type 'int **'

int main() {
int SIZE;
Statistician *answer;
int count;
int item;

add(answer, count, SIZE, item);
    |
//[Warning] passing argument 1 of 'add' from incompatible pointer type [-Wincompatible-pointer-types]

printf("\nThe mean is: %.2f", mean(answer, SIZE));

return 0;
}

這是添加 function:

void add(Statistician answer, int *count, int *SIZE, int item) {
int i;
printf("Enter n: ");
scanf("%d", &item);

answer = (int*)malloc(item * sizeof(int));

if(item == NULL) {
    printf("Memory not allocated.\n");
    exit(0);
}
else {
    for(i = 0; i < item; ++i) {
        scanf("%d", &answer[i]);
    }
    printf("Elements of array are: ");
    for(i = 0; i < item; i++) {
        printf("%d ", answer[i]);
    }
    
    if(item == 10) {
        int m;
        printf("\nAppend array: ");
        scanf("%d", &m);
            
        answer = realloc(answer, m * sizeof(int));
        
        for(i = item; i < item + m; i++) {
            scanf("%d", &answer[i]);
        }
        item = item + m;
        
        int temp, j;
        for(i = 0; i < item; i++) {
            for(j = 0; j <= i; j++) {
                if(*(answer + i) < *(answer + j)) {
                    temp = *(answer + i);
                    *(answer + i) = *(answer + j);
                    *(answer + j) = temp;
                }
            }
        }
        
        printf("Final array: \n");
        for(i = 0; i < item; ++i) { 
            printf("%d ", answer[i]);
        }
    }
}
}

這是不顯示的最大 function:

float mean(Statistician answer, int count) {
int mean =0;
int cnt = 0;

for(int i=0;i<count;i++){
    mean = mean + answer[i];
    cnt++;
}
mean = mean / cnt;
return mean;
}

我完全期望找到一個重復的,但我沒有。

add 的第一個參數被聲明為int ** (通過typedef ),並且您向它傳遞了一個int *類型的參數。 編譯器將允許您執行此操作並發出警告,但這幾乎總是錯誤的。 不要這樣做。

如果您正在運行 64 位代碼,那么在您踩下 memory 之后,任何事情都可能發生。 32 位代碼更容易預測,但它仍然會以糟糕的方式結束。

從您的代碼中,您似乎想要void add(Statistician *answer , Statistician answer;add(&answer

指針的深度學習就到這里了。 在調用 function 中需要修改的東西是其地址傳遞給被調用 function 的東西。 malloc分配 arrays 幾乎總是最終成為雙指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM