2010-12-10 47 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上运行有可怕的文件锁定语义,否则可能值得让写入文件句柄打开整个时间以保存周期,不断打开和关闭文件。