c语言pat基础题改错8.5-1

img

img


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

供参考:

#include <stdio.h>
#include <ctype.h>
int Check(char *a)
{
    int s = 0, i;
    for (i = 0; a[i]; i++){
        if (isdigit(a[i]))
            s = s * 10 + a[i] - '0';
        else
            return -1;
    }
    if (s >= 1 && s <= 1000)
        return s;
    else
        return -1;
}

int main()
{
    char a[128], b[128];
    int  A , B;
    scanf("%s %[^\n]", a, b);
    A = Check(a);
    B = Check(b);
    if (A == -1)
        printf("? + ");
    else
        printf("%d + ", A);
    if (B == -1)
        printf("? = ");
    else
        printf("%d = ", B);
    if (A == -1 || B == -1)
        printf("?");
    else
        printf("%d", A + B);
    return 0;
}

【以下回答由 GPT 生成】

代码问题: 1. 第8行的代码 int matrix[n][m]; 使用的是变量 n 和 m,这是不允许的,因为在 C 语言中,必须使用常量来声明数组的大小。 2. 第13行的代码 scanf("%d", matrix[i][j]); 中,& 操作符缺失,应该写成 scanf("%d", &matrix[i][j]);。 3. 第19行的代码中,应该在数字和空格之间加一个空格,即 printf("%d ", matrix[i][j]);

解决方案如下:

#include <stdio.h>

#define MAX_ROW 100
#define MAX_COL 100

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    int matrix[MAX_ROW][MAX_COL];

    // 读取矩阵数据
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            scanf("%d", &matrix[i][j]);
        }
    }

    // 输出矩阵数据
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

这样修改后的代码应该能够解决你的问题。如果还有其他的问题,请随时提问。



【相关推荐】



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