
按照你的思路大概是这样写,仅供参考,望采纳
#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;
}
你自己的代码可以这个地方加个空格再试下
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;
}