C语言文件打开(基础)


#include<stdio.h>
#include<stdlib.h>
#include<time.h> 
main(){
    int a[10],i,j,max1,max2;
    FILE*fp;
    srand((unsigned)time(NULL));
    fp=fopen("618.txt,w+");
    for(i=0;i<10;i++){
        a[i]=rand()%100;
            for(j=1;j<=i;j++)
                if(a[j]==a[i])
                    i--;
    }    
    for(i=0;i<10;i++)
        fscanf("fp,%d",&a[i]);
    max1=max2=a[0];
    for(i=1;i<10;i++)
        if(a[i]>max1){
            max2=max1;
            max1=a[i];
        }
        else if(a[i]>max2)
            max2=a[i];
    printf("最大值为%d, 次大值为 %d",max1,max2);
    fscanf("fp,%d%d",&max1,&max2);
    fclose(fp);
}

请问程序为什么编译不起来,麻烦大家看一下,谢谢!

这个题目的目标是随机产生10个100以内的不重复整数写入文件,然后再从文件读取出来,计算其最大值和次最大值并打印吗?下面的代码以这种思路,做了一下修改。

修改如下:

参考链接:


 #include<stdio.h>
#include<stdlib.h>
#include<time.h> 
main(){
    int a[10],i,j,max1,max2;
    
    FILE * fp;
    srand((unsigned)time(NULL));
    
   // int b[10];
    // 产生10100以内不重复的整数,存入数组a中 
    for(i=0;i<10;i++){
        a[i]=rand()%100;
        for(j=0;j<i;j++)
            if(a[j]==a[i]){
                i--;
                break;
            }
                    
    }    
   
    fp=fopen("618.txt","w");
    if(fp==NULL){
        printf("文件打开失败!\n");
        return 0;
    }
    // 将数组a内10个整数写入文件"618.txt"for(i=0;i<10;i++){
    //    printf("a[%d]=%d\n",i,a[i]);
        fprintf(fp,"%d ",a[i]);
    }
    fclose(fp);
//    getchar();

    // 从文件中读取写入的10个整数,并存入数组a中 
    fp=fopen("618.txt","r");
    for(i=0;i<10;i++)
        fscanf(fp,"%d",&a[i]);
    fclose(fp);
   // getchar();
    
    
//    for(i=0;i<10;i++){
//        printf("a[%d]=%d\n",i,a[i]);
//        
//    }
    
   // 下面的代码会在当产生的10个整数,最大值为第一个值时,最大值和次最大值都是第一个最大的数 
//    max1=max2=a[0];
//    for(i=1;i<10;i++)
//        if(a[i]>max1){
//            max2=max1;
//            max1=a[i];
//        }
//        else if(a[i]>max2)
//            max2=a[i];

 // 遍历数组a,寻找数组最大值和次最大值 
 // 先从大到小排序数组,然后数组第一个元素即最大值,第二个元素即次最大值 
    for(int j=0;j<9;j++){
        for(int k=j+1;k<10;k++){
            if(a[j]<a[k]){
                int temp = a[j];
                a[j]=a[k];
                a[k]=temp;
            }
        }
    }
    max1=a[0];
    max2=a[1];
    printf("最大值为%d, 次大值为 %d",max1,max2);
    
    fp=fopen("618.txt","a+");
    // 将计算出的最大值和次最大值追加到文件 "618.txt"中 
    fprintf(fp,"\n%d %d",max1,max2);
    fclose(fp);
    
    return 0;
}

img


fopen("618.txt","w+");

【以下回答由 GPT 生成】

这个程序无法编译起来的原因是因为在第19行和第26行的fscanf函数使用了一个未打开的文件指针。具体来说,在第19行的fscanf函数中,程序试图从fp指向的文件中读取整数数据,并将其存储到a[i]中,但是在这之前没有执行过任何向文件中写入整数数据的操作。同样,在第26行的fscanf函数中,程序试图从fp指向的文件中读取两个整数数据,并将其存储到max1和max2中,但是在这之前也没有执行过任何向文件中写入整数数据的操作。

为了解决这个问题,可以在循环中通过fprintf函数将数组a的数据写入到文件中,然后在读取数据之前使用fseek函数将文件指针重新定位到文件的开头。以下是修改后的代码:

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

int main(){
    int a[10], i, j, max1, max2;
    FILE *fp;
    srand((unsigned)time(NULL));
    fp = fopen("618.txt", "w+");
    for(i=0; i<10; i++){
        a[i] = rand()%100;
        for(j=1; j<=i; j++){
            if(a[j] == a[i]){
                i--;
                break;
            }
        }
    }
    for(i=0; i<10; i++){
        fprintf(fp, "%d ", a[i]); // 将数组a的数据写入到文件中
    }
    fseek(fp, 0, SEEK_SET); // 将文件指针重新定位到文件的开头
    for(i=0; i<10; i++){
        fscanf(fp,"%d", &a[i]); // 从文件中读取数据到数组a中
    }
    max1=max2=a[0];
    for(i=1; i<10; i++){
        if(a[i]>max1){
            max2=max1;
            max1=a[i];
        }
        else if(a[i]>max2){
            max2=a[i];
        }
    }
    printf("最大值为%d, 次大值为 %d", max1, max2);
    fclose(fp);
    return 0;
}

这样修改后的代码应该可以正确编译和执行,且可以正确输出最大值和次大值。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^