求助:C语言中while循环无法终止,请求排查代码问题
从你贴的代码片段来看,这个while(verif == 0)循环卡着不终止,核心问题肯定出在verif变量的取值上——毕竟循环的终止条件就是verif不等于0。结合你的代码细节,我梳理了几个最可能的原因:
verifScan函数始终返回0
你的循环全靠verifScan的返回值来切换verif的状态,如果这个函数不管输入合法与否,一直返回0,那循环自然永远不会退出。比如函数内部的验证逻辑写反了(本该合法时返回1,结果写成了返回0),或者根本没处理合法输入的分支。
另外注意到你代码里verifScan(playe...是不完整的,会不会是你调用时传错了参数?比如应该把用户输入的letter、number或者playerI、playerJ这些值传进去,参数不对的话verifScan根本没法正确判断输入合法性,只能一直返回0。输入缓冲区的残留数据搞砸了后续逻辑
你注释掉了fflush(stdin)(顺便说一句,fflush(stdin)是标准未定义行为,本来就不该用),如果用户输入后缓冲区里留了换行符或者其他无效字符,后续的scanf可能会读取到这些垃圾数据,导致verifScan拿到错误的输入值,一直判定不合法返回0。
可以用更安全的方式清理缓冲区,比如在每次scanf之后加这段代码:// 清空输入缓冲区直到遇到换行 while ((getchar()) != '\n');verif变量被意外篡改
虽然你看起来只通过verif = verifScan(...)修改verif,但如果verifScan函数里有不小心修改全局变量、或者通过指针误操作了verif的内存,也可能导致它一直保持0。建议你在循环里加个调试输出,看看每次调用verifScan后verif的实际值:verif = verifScan(/* 补全你的参数 */); printf("当前verif的值:%d\n", verif);
如果能把verifScan的完整代码贴出来,或者补充一下函数的预期行为,能更快定位问题哦。
内容的提问来源于stack exchange,提问作者J.Ternisien

