鱼C论坛

 找回密码
 立即注册
查看: 470|回复: 1

在存储空间足够的情况下,为什么n--会使这段代码会陷入死循环

[复制链接]
发表于 2023-12-12 20:52:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main(){

int n,leb;
char b[100];
gets(b);
leb = strlen(b);
for(n=0;n<leb;n++){
                if(b[n]==' '){
                        for(n;n>leb;n++){
                                b[n]=b[n+1];
                                leb--;
                        }
                        n--;
                }
        }
return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-12 20:53:27 | 显示全部楼层
这段代码之所以会陷入死循环,是因为在循环内部使用了n--操作。

首先,让我们来解释代码的几个问题:

1. `#include`部分没有具体的头文件,需要补充上合适的头文件,例如`#include <stdio.h>`和`#include <string.h>`。

2. `gets(b)`中的参数b应该是一个字符数组,而不是字符,所以需要将char b改为char b[100](100是一个假设的数组大小)。

3. 然后,你进行了一次strlen(b)操作,来获取字符串b的长度,这是正确的。

现在让我们来解释为什么会陷入死循环。在循环的初始条件中,n被设置为0,并且循环的终止条件为n<=leb。在每次循环迭代中,你执行了n--操作,即n的值每次都会减小1。

但是,由于在循环内部执行了n--操作,这意味着在循环结束时,n的值本身已经减小了1。当n减小到和leb相等时(即n = leb),循环终止条件n<=leb不再成立。然而,你在循环结束后又对n进行了一次n--操作,使得n的值再次减小;而此时,循环的终止条件n<=leb仍然不成立,由此导致了死循环。

要解决这个问题,你可以删除循环结束后的n--操作即可。以下是修改后的代码:
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main() {
  4.     int n, leb;
  5.     char b[100];
  6.     gets(b);
  7.     leb = strlen(b);
  8.     for (n = 0; n < leb; n++) {
  9.         // do something here
  10.     }
  11.     return 0;
  12. }
复制代码

请注意,上述代码中的`// do something here`代表你需要在循环内部添加具体的逻辑操作,用来处理字符串中每个字符的行为。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 17:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表