我正在尝试创建一个程序,要求用户选择他想要播放的阶段,然后程序会询问他是否要再次播放或由于某种原因用户输入'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);
}
答案 0 :(得分:4)
在getStage()
功能代码中,您需要更改
scanf("%c", &again);
到
scanf(" %c", &again);
^^ // note the space here
到跳过输入缓冲区中的换行符。
详细说明,当您输入一个输入并按 ENTER 时,它会存储输入,后跟由 ENTER 键引起的换行符。
在下一次迭代中,输入缓冲区中存在的newline
作为下一个%c
格式说明符的输入,使scanf()
跳过一步。
那就是说,
fflush(stdin)
是undefined behavior。摆脱它。int main()
至少应符合int main(void)
标准。