在C中重复程序function失败,scanf相关吗?

所以我试图询问用户是否愿意重复我的程序,我偶尔得到一个奇怪的结果。 它不会每次都发生,我无法弄清楚触发它的原因。

对我来说,在我输入’q’到repeatProgram而不是’q’后,它会分配’return’,但我不知道为什么。

工作时的输出:

退出输入q,继续输入y。
小号
你已输入s,这不是一个有效的选项。

失败时的输出:

退出输入q,继续输入y。
q
你进去了
,这不是一个有效的选择。

代码:

char RepeatProgramPrompt() { char repeatProgram; do { printf("\nTo exit enter q, to continue enter y.\n"); scanf("%c%*c", &repeatProgram); repeatProgram = tolower(repeatProgram); if(repeatProgram != 'y' && repeatProgram != 'q') { printf("\nYou've entered %c, that isn't a valid option.\n", repeatProgram); } }while(repeatProgram != 'y' && repeatProgram != 'q'); return(repeatProgram); } 

所以我的问题是,为什么会发生这种情况? 它会在一堆尝试中正常工作,然后就会失败。

对不起,如果我格式化了这个错误,这是我的第一篇文章。

出现此问题的原因是您的scanf在第一次输入后读取\n 。 为了避免这种情况,请将scanf语句更改为:

 scanf("%c", &repeatProgram); getchar(); // this will remove the excess '\n' 

输出:

 Sukhvir@Sukhvir-PC ~ $ ./test To exit enter q, to continue enter y. d You've entered d, that isn't a valid option. To exit enter q, to continue enter y. s You've entered s, that isn't a valid option. To exit enter q, to continue enter y. d You've entered d, that isn't a valid option. To exit enter q, to continue enter y. q Sukhvir@Sukhvir-PC ~ $ 

在scanf之后使用newline消耗尾随空白字符,它应该工作:

 scanf("%c", &repeatProgram); while(getchar() != '\n') { //do nothing } 

样本输出 。