鱼C论坛

 找回密码
 立即注册
查看: 582|回复: 3

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

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

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

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

x
#include<stdio.h>
int main(){
int n,leb;
char b[100];
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:44:40 | 显示全部楼层
这段代码会陷入死循环的原因是因为在for循环中,条件部分 `n<leb` 没有改变,所以循环会一直进行下去。

另外,在这段代码中还有一些问题需要修正。首先,你没有包含 `<string.h>` 的头文件,导致编译器无法识别 `strlen()` 函数。其次,变量 `b` 没有被初始化赋值,你在计算 `leb` 的时候就使用了它的值,这样会导致 `leb` 的值是不确定的。

如果你的目标是将字符串 `b` 倒过来存储,可以用以下代码实现:
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(){
  4.     char b[] = "hello";  // 初始化字符串 b
  5.     int leb = strlen(b);
  6.     char temp;
  7.     for(int n = 0; n < leb / 2; n++){
  8.         temp = b[n];
  9.         b[n] = b[leb - 1 - n];
  10.         b[leb - 1 - n] = temp;
  11.     }
  12.    
  13.     printf("%s\n", b);  // 输出倒序后的字符串
  14.    
  15.     return 0;
  16. }
复制代码

这段代码中,我们通过交换字符的位置来实现字符串倒序。首先,我们定义了一个临时变量 `temp`,用于存储交换时的临时字符。然后,通过一个 for 循环,从字符串的首尾开始一起向中间遍历,每次交换两个字符的位置。最后,我们使用 `printf()` 函数输出倒序后的字符串。

这样一来,你就可以正确地将字符串 `b` 倒序存储,并打印出来了。

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

使用道具 举报

 楼主| 发表于 2023-12-12 20:46:46 | 显示全部楼层
FishC 发表于 2023-12-12 20:44
这段代码会陷入死循环的原因是因为在for循环中,条件部分 `n

我是想如果字符串中有空格,将空格消除
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-12 20:47:16 | 显示全部楼层
1215787625 发表于 2023-12-12 20:46
我是想如果字符串中有空格,将空格消除

明白了,让我来解释一下代码中的问题并提供修正方案。

首先,问题出现在 `leb = strlen(b)` 这一行。在这里,你试图计算一个未初始化的字符数组 `b` 的长度,这会导致未定义的行为。为了避免这个问题,我们需要确保 `b` 字符数组已经被正确初始化。

其次,你希望通过循环来消除字符串中的空格,但是你没有给出具体的操作。目前的循环体仅有 `b=b` 这一条语句,这实际上是一个无效的操作。我们需要编写逻辑来实际执行空格的消除操作。

以下是修正后的代码:
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. int main() {
  5.     char b[100]; // 假设字符数组可以存储最多100个字符
  6.     cout << "请输入字符串:";
  7.     cin.getline(b, 100); // 读取输入的字符串
  8.     int leb = strlen(b); // 计算字符串的长度
  9.     char result[100]; // 创建一个新的字符数组用于保存消除空格后的结果
  10.     int j = 0; // 新字符数组的索引
  11.     for (int i = 0; i < leb; i++) {
  12.         if (b[i] != ' ') { // 如果当前字符不是空格,则将其添加到新字符数组中
  13.             result[j] = b[i];
  14.             j++;
  15.         }
  16.     }
  17.     result[j] = '\0'; // 在新字符数组的末尾添加字符串结束标志
  18.     cout << "消除空格后的结果为:" << result << endl;
  19.     return 0;
  20. }
复制代码

现在,代码会先读取用户输入的字符串,并将其存储在字符数组 `b` 中。然后,我们计算出字符串的长度并创建一个新的字符数组 `result` 来保存消除空格后的结果。

接下来,在循环中,我们遍历原始字符数组 `b` 的每个字符,如果当前字符不是空格,我们将其添加到新字符数组 `result` 中,并更新索引 `j`。最后,我们在新字符数组 `result` 的末尾添加字符串结束标志,并打印出消除空格后的结果。

这样,你的代码应该能够正确消除字符串中的空格了。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 21:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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