因为那个k之后是输入字符和两个数字,所以想用下结构体数组,顺便锻炼一下自己对于结构体的应用,可是没想到却弄了这么久。
有几个注意事项,一是结构体数组不能对他进行赋值也就是不能结构体数组.成员变量 = 你读入的某个数,而是应该直接scanf 结构体数组.成员变量即可;二是需要getchar去吃掉空格和回车,不然scanf无法读到想要的r和c,这两点鼓捣了我好一会。
早知道不用结构体数组了,直接for输入转换次数,在循环中每转换一次,用变量读入对应的值就好(也需要注意getchar吃掉空格换行)变一次结果就好。
我用结构体数组相当于多此一举,多了一步去接收变换的参数。
#include <stdio.h>

int main(){
    int n,m;
    scanf("%d %d",&n,&m);
    int a[n][m];
    for(int i = 0;i<n;i++){
        for(int j = 0;j<m;j++){
            scanf("%d",&a[i][j]);
        }
    }
    int k;
    scanf("%d",&k);
    getchar();
    struct operation{
        char c;
        int a;
        int b;
    };
    struct operation op[k];
    for(int i = 0;i<k;i++){
        scanf("%c",&op[i].c);
        scanf("%d",&op[i].a);
        scanf("%d",&op[i].b);
        getchar();
    }
    for(int i = 0;i<k;i++){
        if(op[i].c == 'r'){
            for(int j = 0;j<m;j++){
                int temp = a[op[i].a-1][j];
                a[op[i].a-1][j] = a[op[i].b-1][j];
                a[op[i].b-1][j] = temp;
            }
        }
        else if(op[i].c == 'c'){
            for(int j = 0;j<n;j++){
                int temp = a[j][op[i].a-1];
                a[j][op[i].a-1] = a[j][op[i].b-1];
                a[j][op[i].b-1] = temp;
            }
        }
    }
    for(int i = 0;i<n;i++){
        for(int j = 0;j<m;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}