C语言程序scanf不停止、无输出且持续请求输入的问题排查
程序陷入无响应(持续要求输入、无输出)的原因及修复
你的程序出现问题的核心原因是**value函数中的内层循环存在致命错误,导致程序进入无限循环**,无法执行到输出逻辑,同时因进程未终止,输入交互表现异常。
具体错误点:
在value函数的内层for循环中,存在两个严重问题:
- 迭代变量错误:循环初始化了
j,但后续却递增参数b而非j。这不仅会破坏原参数b的取值,还会让j始终保持初始值b-l,完全无法遍历目标范围。 - 循环条件永远为真:循环条件写为
b < b + l + 1,只要平滑因子l是非负整数(符合作业要求的场景),这个表达式永远成立——因为b + l +1必然大于b,直接导致内层循环变成无限循环。
程序在调用value函数时会卡死在这个无限循环中,根本无法继续执行后续的输出代码,也不会终止进程,因此看起来像是scanf一直在要求输入,但实际程序已经停止响应。
修复后的value函数代码:
int value(int **arr, int a, int b, int n, int l) { int val = 0; // 修正循环变量与条件,遍历i-l到i+l、j-l到j+l的范围 for (int i = a - l; i <= a + l; i++) { for (int j = b - l; j <= b + l; j++) { if (i >= 0 && i < n && j >= 0 && j < n) { val += arr[i][j]; } } } return val; }
额外需要修正的小问题:
原main函数中的换行输出语句存在语法错误:
printf(" ");
需要修正为标准的换行写法:
printf("\n");
修复后程序流程:
修正上述错误后,程序会正常完成矩阵输入,调用value函数计算每个元素的平滑和,最后输出结果,不会再出现无限要求输入的情况。
内容的提问来源于stack exchange,提问作者Sahil Gautam
相关产品推荐
相关产品推荐

