程序重复自己的问题

时间:2016-01-15 19:25:47

标签: c char newline scanf format-specifiers

我正在尝试创建一个程序,要求用户选择他想要播放的阶段,然后程序会询问他是否要再次播放或由于某种原因用户输入'y' - 程序重复自己,但没有运行“阶段”功能。

int main()
{
    while (again == 'y')
    {

        getStage(); 
    }

    if (again == 'n')
    {
        printf("BYE BYE!");
    }

    system("PAUSE");
}

/*
    Function "getStage"-
        - gets a choice from the user about the stage he wants to play on
          and checks if the choice is proper.
        - Transfers the program to the "randCode" function to make secret code.
        - Transfers the program to the "stages" function
*/

void getStage()
{

    choice= 0;

    do
    {
        printf("What stage would you like to choose? Choose Wisely: ");
        scanf("%d", &choice);
        fflush(stdin);
        system("COLOR 07");
    } while(choice < 1 || choice > 4);

    randCode();

    stages(choice);

    printf("Whould you like to play again? (y / n): ");
    scanf("%c", &again);

}

1 个答案:

答案 0 :(得分:4)

getStage()功能代码中,您需要更改

 scanf("%c", &again);

scanf(" %c", &again);
      ^^  // note the space here

跳过输入缓冲区中的换行符。

详细说明,当您输入一个输入并按 ENTER 时,它会存储输入,后跟由 ENTER 键引起的换行符。

在下一次迭代中,输入缓冲区中存在的newline作为下一个%c格式说明符的输入,使scanf() 跳过一步。

那就是说,

  1. fflush(stdin)undefined behavior。摆脱它。
  2. int main()至少应符合int main(void)标准。