鱼C论坛

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

[已解决]为什么赋值成功了却打印不出来

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

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

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

x
#include<iostream>

using namespace std;
//打印帕斯卡三角形
int main()
{
        int i;
        cout << "请输入要打印的行数:";
        cin >> i;

        int* array = new int[2*i+1]();//动态数组,记得要释放掉内存
        for (int k = 0; k < i; k++)
        {
                array[i - k] = 1;
                array[i + k] = 1;
                for (int l = 1; l < i -k; l++)
                {
                        cout << " ";
                }
                for (int n = i - k; n <= i + k; n = n + 2)
                {
                        cout << array[i - k]<<" ";
                }
                cout << endl;

                for (int m = i - k + 1; m < i + k; m = m + 2)
                {
                        if (k == i - 1)
                        {
                                break;
                        }
                        array[m] = array[m - 1] + array[m + 1];
                        //cout << array[i] << endl;
                        cout << array[m] << endl;
                }
        }
        delete[] array;
        return 0;
}
最佳答案
2023-12-20 20:59:50
在你的代码中,赋值语句 `array = 1;` 错误地使用了赋值运算符(`=`)而不是赋值给数组元素的操作(`[]`)。这样的赋值只会将 `array` 指针的值改变为 `1`,而不会修改数组中的元素。

另外,你在每次循环中都用 `array = new int();` 重新分配内存,并且没有释放掉之前的内存。这会导致内存泄漏。我们只需要一次性分配足够的内存即可。

下面是修复后的代码:
#include <iostream>

using namespace std;

//打印帕斯卡三角形
int main()
{
    int i;
    cout << "请输入帕斯卡三角形的行数:";
    cin >> i;

    // 动态分配一个数组来保存帕斯卡三角形
    int** array = new int*[i];
    for (int k = 0; k < i; k++)
    {
        array[k] = new int[k+1];
        array[k][0] = 1;
        array[k][k] = 1;

        // 计算帕斯卡三角形的值
        for (int l = 1; l < k; l++)
        {
            array[k][l] = array[k-1][l-1] + array[k-1][l];
        }
    }

    // 打印帕斯卡三角形
    for (int k = 0; k < i; k++)
    {
        for (int l = 0; l <= k; l++)
        {
            cout << array[k][l] << " ";
        }
        cout << endl;
    }

    // 释放内存
    for (int k = 0; k < i; k++)
    {
        delete[] array[k];
    }
    delete[] array;

    return 0;
}

在这个修复的代码中,我们首先通过 `new int*[i ]` 动态地分配了一个指针数组,用于保存帕斯卡三角形的每一行。然后在每次循环中,通过 `new int[k+1]` 动态地分配一个数组来保存当前行的元素。接着,我们使用 `[]` 进行赋值,将正确的值赋给数组元素。最后,我们在打印完成后释放了所有动态分配的内存。

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

使用道具 举报

发表于 2023-12-20 20:59:50 | 显示全部楼层    本楼为最佳答案   
在你的代码中,赋值语句 `array = 1;` 错误地使用了赋值运算符(`=`)而不是赋值给数组元素的操作(`[]`)。这样的赋值只会将 `array` 指针的值改变为 `1`,而不会修改数组中的元素。

另外,你在每次循环中都用 `array = new int();` 重新分配内存,并且没有释放掉之前的内存。这会导致内存泄漏。我们只需要一次性分配足够的内存即可。

下面是修复后的代码:
#include <iostream>

using namespace std;

//打印帕斯卡三角形
int main()
{
    int i;
    cout << "请输入帕斯卡三角形的行数:";
    cin >> i;

    // 动态分配一个数组来保存帕斯卡三角形
    int** array = new int*[i];
    for (int k = 0; k < i; k++)
    {
        array[k] = new int[k+1];
        array[k][0] = 1;
        array[k][k] = 1;

        // 计算帕斯卡三角形的值
        for (int l = 1; l < k; l++)
        {
            array[k][l] = array[k-1][l-1] + array[k-1][l];
        }
    }

    // 打印帕斯卡三角形
    for (int k = 0; k < i; k++)
    {
        for (int l = 0; l <= k; l++)
        {
            cout << array[k][l] << " ";
        }
        cout << endl;
    }

    // 释放内存
    for (int k = 0; k < i; k++)
    {
        delete[] array[k];
    }
    delete[] array;

    return 0;
}

在这个修复的代码中,我们首先通过 `new int*[i ]` 动态地分配了一个指针数组,用于保存帕斯卡三角形的每一行。然后在每次循环中,通过 `new int[k+1]` 动态地分配一个数组来保存当前行的元素。接着,我们使用 `[]` 进行赋值,将正确的值赋给数组元素。最后,我们在打印完成后释放了所有动态分配的内存。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 04:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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