Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 产生错误输出_C_Data Structures - Fatal编程技术网

C 产生错误输出

C 产生错误输出,c,data-structures,C,Data Structures,我正在为明天的课程编译这段代码,你知道为什么这里会有这样的代码吗: #include <stdio.h> #include <stdlib.h> typedef struct { int row; int col; int value; } term; void smTranspose(term a[], term b[]) { int m, n, v, i, j, p; m = a[0].row; n = a[0].c

我正在为明天的课程编译这段代码,你知道为什么这里会有这样的代码吗:

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

typedef struct {
    int row;
    int col;
    int value;
} term;

void smTranspose(term a[], term b[]) {
    int m, n, v, i, j, p;
    m = a[0].row;
    n = a[0].col;
    v = a[0].value;
    b[0].row = n;
    b[0].col = m;
    b[0].value = v;
    if (v > 0) {
        p = 1;
        for (i = 0; i < n; i++)
            for (j = 1; j <= v; j++)
                if (a[j].col == i) {
                    b[p].row = a[j].col;
                    b[p].col = b[j].row;
                    b[p].value = a[j].value;
                    printf("<%d %d %d>\n", b[p].row, b[p].col, b[p].value);
                    p++;
                }
    }
}
int main() {
    term a[3] = { { 1,1,8 },{ 2,1,9 },{ 1,3,17 } };
    term b[3];

    smTranspose(a, b);

    getchar();

}
#包括
#包括
类型定义结构{
int行;
int col;
int值;
}术语;
无效转置(术语a[],术语b[]{
int m,n,v,i,j,p;
m=a[0]。行;
n=a[0].列;
v=a[0]。数值;
b[0]。行=n;
b[0].col=m;
b[0]。值=v;
如果(v>0){
p=1;
对于(i=0;i对于(j=1;j这里有一点建议,矩阵可以直接用平面数组表示,这样可以大大简化代码,即:

#include <stdio.h>

void transpose(int *a, int *b) {
    for (int y = 0; y < 3; y++) {
        for (int x = 0; x < 3; x++) {
            b[y * 3 + x] = a[x * 3 + y];
        }
    }
}

void print_matrix(int *m) {
    printf("\n");
    for (int y = 0; y < 3; y++) {
        for (int x = 0; x < 3; x++) {
            printf("%d ", m[y * 3 + x]);
        }
        printf("\n");
    }
}

int main() {
    int a[] = {1, 1, 8, 2, 1, 9, 1, 3, 17};
    int b[9];

    transpose(a, b);
    print_matrix(a);
    printf("----------");
    print_matrix(b);
}
#包括
无效转置(int*a,int*b){
对于(int y=0;y<3;y++){
对于(int x=0;x<3;x++){
b[y*3+x]=a[x*3+y];
}
}
}
无效打印矩阵(int*m){
printf(“\n”);
对于(int y=0;y<3;y++){
对于(int x=0;x<3;x++){
printf(“%d”,m[y*3+x]);
}
printf(“\n”);
}
}
int main(){
INTA[]={1,1,8,2,1,9,1,3,17};
int b[9];
转置(a,b);
打印矩阵(a);
printf(“--------------”;
打印矩阵(b);
}
固定大小为3x3,无需检查边界


至于你的作业,我会把整个调试交给你;)

那么预期的输出是什么?您是否尝试过在调试器中逐行检查代码以查看发生了什么情况?作为新用户,您有责任在发布之前了解规则。阅读。然后阅读。请记住,您需要先完成作业,包括调试代码和描述代码调试尝试的结果。就目前的情况而言,您的问题是一个“为我调试此”请求,而这些请求在这里不太受欢迎。顺便说一下,当您执行
b[p]。col=b[j]。行;
那么
b[j]
我想可能未初始化。您的意思是使用
a[j]。行
?也可以
为(j=1;j添加一些有意义的变量名如何?例如,您可以使用
inputerms
resultTerms
,而不是
a
b
。1337 d00dz可能流行晦涩的单字符变量名,但真正的程序员使他们的代码易于理解。
#include <stdio.h>

void transpose(int *a, int *b) {
    for (int y = 0; y < 3; y++) {
        for (int x = 0; x < 3; x++) {
            b[y * 3 + x] = a[x * 3 + y];
        }
    }
}

void print_matrix(int *m) {
    printf("\n");
    for (int y = 0; y < 3; y++) {
        for (int x = 0; x < 3; x++) {
            printf("%d ", m[y * 3 + x]);
        }
        printf("\n");
    }
}

int main() {
    int a[] = {1, 1, 8, 2, 1, 9, 1, 3, 17};
    int b[9];

    transpose(a, b);
    print_matrix(a);
    printf("----------");
    print_matrix(b);
}