在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 }
样本输出 。