如何通过提供重复选项来执行代码?

问题描述

在此代码中,不允许执行第一个代码,因为如果用户进一步想要执行并再次重复该过程,我希望它提供一个选项。第二件事是,如果用户键入 y 进行进一步保存,我想一次又一次将其保存在 CSV 文件中。

提供选项的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int allowmain(void) {
  char select_option[2];
  int answer = -1;

  while (answer < 0) {
    printf("Do you want it to repeat (y/n)? ");
    if (fgets(select_option,2,stdin) == NULL)
      break;

    switch (select_option[0]) {
    case 'y':
      answer = 1;
      break;
    case 'n':
      answer = 0;
      break;
    }
  }

  if (answer < 0)
    answer = 0;

  return answer;
}

要执行的代码

int main() {
  FILE *fw = fopen("new.csv","a");
  char data[3][21],input[20];
  int done = 0,repeat = 0;

  while (!done) {

    if (repeat) {
      if (!allowmain())
        break;
    }

    repeat = 1;

    for (int i = 0; i < 3; i++) {
      printf("Enter a word: ");
      fgets(data[i],20,stdin);
    }

    fprintf(fw,"%s %s %s",data[0],data[1],data[2]);
    
    return 0;
  }
}

解决方法

最简单的方法是将main函数提取到自己的函数中。您可以在执行过程中包装该函数,并且只要allowmain返回true即可继续运行:

void write_words() {
  FILE * fw = fopen("new.csv","a");
  char data[3][21],input[20];

  for (int i=0; i<3; i++) {
    printf("Enter a word: ");
    fgets(data[i],20,stdin);
  }

  fprintf(fw,"%s %s %s",data[0],data[1],data[2]);
  fclose(fw);
}

int main() {
  do {
    write_words();
  } while (allowmain());
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...