运行一个函数并检查是否已经使用C执行了另一个函数

时间:2019-03-18 21:35:28

标签: c function conditional-statements call

我想使用C运行基于另一个函数。我需要检查是否执行了特定功能。如果是,那么我希望此函数在调用时也能执行,否则不执行。

我正在从文件中读取一些文本。在第一个功能中,我想阅读并打印它们。现在在第二个函数中,我需要一个条件,即如果执行第一个函数,则还要运行它。否则,什么都不做。

我该怎么做?

编辑

注意::这是完整的解决方案。回答问题后。

我的代码在这里:

#include <stdio.h>

static int already_run = 0;

void Reading_Function(FILE **rf)
{

already_run = 1;
   *rf=fopen("file.txt","r");

   if(rf==NULL)
   {
       printf("Error in file openning.");
       return 0;
   }

    char first [120];
    fscanf(*rf,"%s",first);
    printf("Value: %s", first);

}

// this is the second function

void Second_Function(FILE *rf)
{
if (already_run)
{
    char second [50];
    fscanf(rf,"%s",second);
    printf("Value: %s", second);
}
else

    return;


}

int main()
{



  char t;
  FILE *rf;
  while(scanf("%c", &t)==1)
    {
        switch(t)
        {

        case 'f' :
        Reading_Function(&rf);

        break;

        case 's' :
          Second_Function(rf);

        break;

        }
    }
    return 0;
}

如果问题不清楚,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:1)

以上评论已回答您的问题。为了简单起见,代码如下所示:

static int already_run = 0;

void Reading_Function(FILE *rf) {
  already_run = 1;
  // ...
}

void Second_Function(FILE *rf) {
  if (already_run) {
    // ...
  } else {
    // ...
  }
}

也就是说,如果您只是想让人们打电话给Second_Function,而让First_Function中的东西在第一次被调用Second_Function时运行,这是一种更好的方法这样做是:

void Second_Function(FILE *rf) {
  static int already_run = 0;

  if (!already_run) {
    already_run = 1;

    // Initialization code goes here.  You can even split it out
    // into a second function if you want, in which case you would
    // just invoke that function here.
  }

  // ...
}

这样,您就不必担心任何全局变量。

当然,如果您的代码是多线程的,则这两种方法都会崩溃;在这种情况下,您应该使用一次(例如pthread_once_tcall_onceInitOnceExecuteOncesomething,它们会抽象出不同的API以便于移植)。