You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:C语言中while循环无法终止,请求排查代码问题

排查你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:46:57