全局变量row和col为什么每次使用都恢复初值2和1

题目描述

其实用不到看题,搜UVa227就可以看到题目

题目来源及自己的思路

Puzzle, ACM/ICPC World Finals 1993, UVa227

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

#include <stdio.h>
#include <string.h>
#define len 6
char matrix[len][len] = {
        "TRGSJ", "XDOKI", "M VLN", "WPABE", "UQHCF"
};
int flag = 1, row = 2, col = 1;
void Above(char matrix[len][len], int row, int col) {
    if (row > 0 && row <= 4) {
        matrix[row][col] = matrix[--row][col];
        matrix[row][col] = ' ';
    } else flag = 0;
}
void Below(char matrix[len][len], int row, int col) {
    if (row >= 0 && row < 4) {
        matrix[row][col] = matrix[++row][col];
        matrix[row][col] = ' ';
    } else flag = 0;
}
void Left(char matrix[len][len], int row, int col) {
    if (col > 0 && col <= 4) {
        matrix[row][col] = matrix[row][--col];
        matrix[row][col] = ' ';
    } else flag = 0;
}
void Right(char matrix[len][len], int row, int col) {
    if (col >= 0 && col < 4) {
        matrix[row][col] = matrix[row][++col];
        matrix[row][col] = ' ';
    } else flag = 0;
}
int main() {
    char ins[100]; // instruction
    gets(ins);
    for (int i = 0; i < strlen(ins); ++i) {
        if (ins[i] == '0') break;
        if (ins[i] == 'A') {Above(matrix, row, col);continue;}
        else if (ins[i] == 'B') {Below(matrix, row, col);continue;}
        else if (ins[i] == 'L') {Left(matrix, row, col);continue;}
        else if (ins[i] == 'R') {Right(matrix, row, col);continue;}
        else flag = 0;
    }
    if (flag) {
        for (int j = 0; j < len - 1; ++j) {
            printf("\n");
            for (int k = 0; k < len - 1; ++k)
                printf("%c ", matrix[j][k]);
        }
    } else printf("This puzzle has no final configuration.");
    return 0;
}

你期待的结果是什么?实际看到的错误信息又是什么?

在调用Above, Below, Left, Right的时候row和col就恢复2, 1
怎样调用后row和col保持修改?

阅读 2.5k
4 个回答

函数参数也是全局变量?!!!第一天学编程吗!

我可以不负责任的说,我没看完你的代码,不负责任的猜测,可以用指针入参解决(fun(&row,&col)), 如果不用指针而只是单纯的(fun(row,col))你只是复制了他们的值,row和col只是局部变量,每次执行完fun返回之后该函数的栈也清了,并没有对外层的row和col作修改,然后row和col再次作为其他函数的参数时还是初始值。
建议楼主了解一下栈和指针。

函数参数中的row和col隐藏了同名的全局变量,因此在该函数的作用域内row和col代表的是这两个形参,而不是文件头部定义的那两个全局变量。楼主需要先了解一下作用域的相关知识。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题