我的程序停止是否必须与scanf有关,如果是,我应该如何纠正它?[关闭]

wixjitnu  于 2023-03-11  发布在  其他
关注(0)|答案(1)|浏览(93)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
16小时前关门了。
Improve this question
我有一个apply()函数,用户输入一个数字时调用它,当输入“2”时(检查它是数字,然后将它转换成整数),我可以输入名称,然后输入日期,日期之间有空格(这是练习中指定的),但是,当我第二次输入“2”时,它打印出“您的姓名:“,或者有时它让我输入我的名字,并打印“你希望工作的日子:“然后程序就停止了,没有任何错误代码,甚至没有打印apply()函数的最后一行。

int main(){
  int choice = 9;
  while(choice != 0){
    choice = getActionFromUser();
    executeAction(choice);
  }
}

int getActionFromUser(){
  char actionId[20];
  printf("\nYour action: ");
  fflush(stdout);
  scanf("%s", actionId);
  int res = -1;
  if(isNumber(actionId)){
    res = atoi(actionId);
  }
  if(res >=0 && res <= 5){
     return res;
  }
  return -1;
}

void apply(){

  printf("\n_________________________________\n");
  printf("Application form");
  printf("\n_________________________________\n");

  //Name
  printf("Your name: ");
  fflush(stdout);
  char name[256];
  scanf("%[^\n]%*c",name);
  fflush(stdin);

  //Day
  printf("The days you choose: ");
  char days[256];
  fflush(stdout);
  scanf("%[^\n]%*c",days);

  fflush(stdin);
  printf("\n_________________________________\n"); //<--- This
}

void executeAction(int choice){
  switch (choice)
  {
    //more code
    case 2:
      apply();
      break;
    //more code
   }
}
yc0p9oo0

yc0p9oo01#

原来这是segfault在我的代码的其他地方,但在windows上我没有得到一个错误信息,我尝试了我的mac上,我看到它在那里。

相关问题