2010-12-10 81 views
1

我有一個C程序,它將素數打印到.txt文件中。 我希望程序以幾分鐘的時間向我詢問執行時間。試着用這段代碼解決。如何控制執行時間C

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

int main() 
{ 
    execute(); 
    return(0); 
} 

int execute(int minute) 
{ 
    time_t now; 
    time(&now); 
    struct tm *tmp = localtime(&now); 
    printf("How long you want to execute the program by minute? "); 
    scanf("%d",&minute); 
    printf("%d %02d %02d\n",tmp->tm_hour, tmp->tm_min+minute, tmp->tm_sec); 
    return(minute); 
} 

這裏也是我想運行的代碼。

#include <stdio.h> 

int isprime(int x); 

int main(void) 
{ 
     int AX_REGISTER, BX_REGISTER; 
     FILE *number, *primes; 

     int forever = 1; 

     while (forever) 
     { 

       if ((number = fopen("lastnumber.txt", "r")) == NULL) 
       { 
         fprintf(stderr, "Cannot read LASTNUMBER.txt file.\n"); 
         return 1; 
       } 
       fscanf(number,"%d",&AX_REGISTER); 
       fclose(number); 

       BX_REGISTER=AX_REGISTER; 
       AX_REGISTER=AX_REGISTER+1; 

       if ((number = fopen("lastnumber.txt", "w")) == NULL) 
       { 
         fprintf(stderr, "Cannot write LASTNUMBER.txt file.\n"); 
         return 1; 
       } 
       fprintf(number,"%d\n",AX_REGISTER); 
       fclose(number); 

       if (isprime(BX_REGISTER)) 
       { 

         if ((primes = fopen("primes.txt", "a")) == NULL) 
         { 
           fprintf(stderr, "Cannot open PRIMES.txt file.\n"); 
           return 1; 
         } 

         fprintf(primes,"%d\n",BX_REGISTER); 
         fclose(primes); 
       } 

     } 
     return 0; 
} 

int isprime(int x) 
{ 
     int i; 

     for (i=2;i<x;i++) 
     { 
       if (x%i==0) 
         return 0; 
     } 
     return 1; 
} 

因爲我是C編程語言的新手,我不能自己解決它。有人能幫我嗎?

+0

如果這是基準測試,那麼通常運行到其他指定的限制,然後看看它花了多長時間,而不是你想要做什麼更好。 – 2010-12-10 01:24:10

回答

2

某些平臺具有alarm()函數,您可以使用該函數在指定的秒數後向您的應用程序發送信號。

如果你不在Windows上,man alarm應該給你一些關於這個功能的信息。如果你在Windows上,可能需要採用不同的方法。


在另一個說明中,您應該考慮使用與您正在編寫的代碼有關的變量名稱。對於一個偶然的讀者,名字BX_REGISTER意味着什麼。也許考慮改名爲number_to_test(和AX_REGISTERnext_number什麼的)。

0

由於您在while循環中運行,只需獲取while循環外的當前時間,添加分鐘數,並在while循環結束時獲取時間。喜歡的東西:這種方法的

time_t now; 
time_t end_time; 

now = time(); 
end_time = now + (minutes * 60); 

while(now < end_time) 
{ 
    ...Do processing here... 

    now = time(); 
} 

的一個缺點是,如果isprime()需要很很長的時間,然後運行,你可以通過相當多的過沖的結束時間。解決這個問題的一種方法是將end_time的值傳遞給isprime(),並在該函數的循環中檢查它。或者只是在正在運行程序的終端中按Ctrl-C :)

通過一切手段寫入文件,以防程序崩潰 - 您不會想要失去工作時間,但我建議您只在while循環之前讀取lastnumber.txt中的值,然後將其保存在內存中。它會加快你的程序。

另外,除非在Windows上運行有可怕的文件鎖定語義,否則可能值得讓寫入文件句柄打開整個時間以保存週期,不斷打開和關閉文件。

相關問題