2016-12-31 77 views
2

我的程序有一個小問題。 我想從函數中評估時間,編譯器給我一個錯誤。 我知道,我們的問題是,但我只是不知道如何解決它:/錯誤:函數'ptr'的參數太少,需要函數的eval_time

#include <stdio.h> 
#include <time.h> 

int isPerfect(int zahl){ 
int zaehler1, zaehler2, summe; 
for(zaehler1=1;zaehler1<=zahl;zaehler1++){ 
    summe=0; 
    for(zaehler2=1;zaehler2<=zaehler1/2;zaehler2++){ 
     if(zaehler1%zaehler2==0){ 
     summe=summe+zaehler2; 
     } 
    } 
} 
return summe; 
} 

double eval_time(int(*ptr)(int)){ 
    time_t begin,end; 
    begin=time(NULL); 
    (*ptr)(); //compiler shows error here! 
    end=time(NULL); 
    return difftime(end,begin); 
    } 

int main(void){ 
    int zahl; 
    for(zahl=1;zahl<=500;zahl++){ 
     if(isPerfect(zahl)==zahl){ 
     printf("%d ist eine perfekte Zahl!\n", zahl); 
     } 
    } 
    printf("Die Zeit die gebraucht wurde: %.2lf s\n",eval_time(isPerfect)); 
return 0; 
} 

所以我的問題是我需要所以evals從funtion「isPerfect」的時候改變有哪些? 對不起我的變量是在德國,我希望這不是一個問題;)

+3

你在'eval_time'中的函數指針需要'int'參數。你需要提供這個論點。就像錯誤在說。確切地說*你應該通過什麼取決於你。 –

回答

2

傳遞一個參數,也許是這樣的:

double eval_time(int(*ptr)(int), int zahl){ 
    time_t begin,end; 
    begin=time(NULL); 
    (*ptr)(zahl); 
    -------^ 
    end=time(NULL); 
    return difftime(end,begin); 
} 

的另一個問題是,你可能需要調用在beginend之間運行很多次,實際上在time()值中得到了可測量的差異。

+2

也'ptr(zahl)'只會做。 – alk

+0

好的,我現在可以編譯,但輸出總是0.00秒,即使程序超過1分鐘以獲得低谷時,我將zahl <= 500的值增加到zahl <= 50000000 – slauko

+1

@slauko:如何運行代碼在調試器內部逐行跟蹤程序,檢查相關變量的值,以瞭解真正發生的事情? – alk