因为那个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; }