c语言pat基础题改错0821L1023

img

img


我的代码出现问题,本题希望可以得到大家的指导,谢谢你的帮助!

供参考:

#include <stdio.h>
int main()
{
    char str[10001];
    int  i, g, p, l, t;
    scanf("%s", str);
    for (i = 0, g = 0, p = 0, l = 0, t = 0; str[i]; i++) {
        if (str[i] == 'g' || str[i] == 'G')
            g++;
        else if (str[i] == 'p' || str[i] == 'P')
            p++;
        else if (str[i] == 'l' || str[i] == 'L')
            l++;
        else if (str[i] == 't' || str[i] == 'T')
            t++;
    }
    while (g > 0 || p > 0 || l > 0 || t > 0) {
        if (g > 0)
            printf("G"), g--;
        if (p > 0)
            printf("P"), p--;
        if (l > 0)
            printf("L"), l--;
        if (t > 0)
            printf("T"), t--;
    }
    return 0;
}

看一下你的代码?

【以下回答由 GPT 生成】

错误1: 数组 arr 的大小应为常量表达式,不能是变量 n。解决方法是将 int arr[n]; 改为 int arr = (int)malloc(sizeof(int) * n);,并在使用完成后记得释放内存,即 free(arr);

错误2: 在使用 scanf 读取 arr 数组元素的时候,应该传入元素的地址,而不是元素的值。解决方法是将 scanf("%d", arr[i]); 改为 scanf("%d", &arr[i]);

改正后的代码如下:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, m;
    scanf("%d %d", &n, &m);

    int i;
    int *arr = (int*)malloc(sizeof(int) * n); // 为 arr 动态分配内存
    for (i = 0; i < n; i++) {
        scanf("%d", &arr[i]); // 将元素的地址传给 scanf
    }

    int index, val;
    for (i = 0; i < m; i++) {
        scanf("%d %d", &index, &val);
        if (index >= n || index < 0) {
            printf("Index out of bounds\n");
        } else {
            arr[index] = val;
        }
    }

    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    free(arr); // 释放内存

    return 0;
}

注意:在使用动态分配的内存时,需要手动释放内存以避免内存泄漏。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^