用于任务调度的C++代码

-2 c

这段代码没有错误但是当我执行它时,没有输出,程序自动关闭说程序已经停止工作.

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
int main()
{
char *timetoken;
char currtime[7];
char schedtime[7];
int i;
struct tm *localtimeptr;
strcpy(schedtime,"15:25:00");
while(6!=9)
{
   time_t lt;
   sleep(1);
   lt = time(NULL);
   localtimeptr = localtime(lt);
   timetoken=strtok(asctime(localtimeptr)," ");
   for(i=1;i<5;i++)
   timetoken=strtok('\0'," ");
   if(i==3)
   {
           strcpy(currtime,timetoken);
    }
}
           printf("The current time is: %s\n",currtime);
           printf("We are waiting for: %s\n",schedtime);
           if(!strcmp(currtime,schedtime))
           {
                                          printf("Time to do stuff \n");
                                          system("C:\PROJECT X");
            }        
            getch();
            return 0;                      
}
Run Code Online (Sandbox Code Playgroud)

tem*_*def 5

我不确定你要做什么,但这很可疑:

while(6!=9)
{
   /* ... */
}
/* ... more code ... */
Run Code Online (Sandbox Code Playgroud)

6总是不等于9,所以这是一个无限循环.没有办法摆脱循环,因此"更多代码"部分中的任何内容都不会执行.这意味着您的printfs将不会执行,也不会执行您的system呼叫.你需要摆脱这种循环.

为了使代码更容易阅读(这应该始终是最重要的!),我建议只写

while (true) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

更清楚地说明循环应该运行,直到你明确地break从它开始.

另请注意:此代码

system("C:\PROJECT X");
Run Code Online (Sandbox Code Playgroud)

是不正确的,因为C++会将其解释\P为转义字符.要解决这个问题,请逃避斜线:

system("C:\\PROJECT X");
Run Code Online (Sandbox Code Playgroud)

对于另一个错误,请仔细查看此循环:

   for(i=1;i<5;i++)
   timetoken=strtok('\0'," ");
   if(i==3)
   {
       strcpy(currtime,timetoken);
   }
Run Code Online (Sandbox Code Playgroud)

C++将其解释为

   for(i=1;i<5;i++) {
       timetoken=strtok('\0'," ");
   }

   if(i==3)
   {
       strcpy(currtime,timetoken);
   }
Run Code Online (Sandbox Code Playgroud)

从这里可以清楚地知道这不起作用,因为if语句不在循环中.因此,i永远不会3.你可能意味着

   for(i=1;i<5;i++) {
       timetoken=strtok('\0'," ");
       if(i==3)
       {
           strcpy(currtime,timetoken);
       }
   }
Run Code Online (Sandbox Code Playgroud)

努力清理代码格式(缩进,空格等)将有助于防止出现这种错误.如果你已经声明i为for循环的本地,那么你可能会早先发现它.例如,此代码无法编译:

   for(int i = 1; i < 5; i++) {
       timetoken=strtok('\0'," ");
   }

   if(i==3) // i is not in scope
   {
       strcpy(currtime,timetoken);
   }
Run Code Online (Sandbox Code Playgroud)

作为一般规则,延迟声明变量直到您绝对需要它们.它使代码更容易阅读(使用中的变量往往接近使用它们的代码)和更少的错误(如上所示).

希望这有助于您入门!