多项式加法,输出错误?

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/781611310966190.png "#left")

img

img

按照你的思路大概是这样写,仅供参考,望采纳

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

int main(int argc, char *argv[])
{
    FILE *f, *g;
    int a[51] = {0}, i, n, j;
    char temp[16] = {0};
    
    f = fopen("poly.in", "r");
    g = fopen("poly.out", "w");

    while(!feof(f))
    {
        fscanf(f, "%d %d",&j, &n);
        a[n] += j;
    }

    for(i = 50; i >= 0; i--)
    {
        if(a[i] > 0)
        {
            bzero(temp, sizeof(temp));
            sprintf(temp ,"%d %d ", a[i], i);
            fwrite(temp, strlen(temp), 1 ,g);
        }
    }

    fclose(f);
    fclose(g);
    return 0;
}

你自己的代码可以这个地方加个空格再试下

img

1、fopen打开的文件名字错误,是 poly.in 和 poly.out,后面是没有.txt的。
2、段错误的原因,其实就是第一点,fopen没有判断返回的文件指针是否为空 NULL,文件打开失败导致下面使用空的文件指针出现异常,就是段错误。

fprintf(g,"%d %d\n",a[i],i)l

int main() {
    FILE *f, *g;
    int a[51], i, n, j;
    f = fopen("poly.in", "r");
    g = fopen("poly.out", "w");
    for (i = 0; i < 51; i++)
        a[i] = 0;
    while (!feof(f)) {
        fscanf(f, "%d%d", &j, &n);
        a[n] = j + a[n];
    }
    rewind(f);
    for (int i = 50; i >= 0; i--) {
        if (a[i] > 0)
            fprintf(g, "%d %d ", a[i], i);
    }
    fprintf(g, "\r");
    fclose(f);
    fclose(g);
    return 0;
}