C语言代码片段查错<一>

源代码:

//向文件中写入数据
void fileOperate_Write(FILE *fp)
{
    if(fp == NULL)
    {
        perror("文件打开失败");
        exit(EXIT_FAILURE);
    }
    int arr[10];
    for(int i=0;i<10;i++)
    {
        arr[i] = i*3;
        //写入数据
        if(fprintf(fp,"%d\n",arr[i])){}
        else
        {
            perror("写入失败");
            exit(EXIT_FAILURE);
        }
    }
}

void fileOperate_Scanf(FILE *fp)
{
    int sum = 0;
    int arr[10];
    int i = 0;

    while (i < 10 && fscanf(fp,"%d",&arr[i++]) == 1)	//问题出在这个位置!
    {
        printf("%d\n",arr[i-1]);
        sum += arr[i-1];
    }
    printf("总和:%-2d\n",sum);
}

​ 请考虑以上代码。这是一段文件读取操作代码片段,目的是将文件流指针fp所指向的文件中的数据进行读取并存储到arr数组中,计算总和,并打印读取到的数据。该段代码运行后while循环判断为假,导致循环体内代码不被执行,从而得出非预期结果。

原因分析:

​ 之前的代码进行了文件写入,将数据写入到临时文件之中。当数据写入完成后,文件内部位置指示器停留在了文件末尾,因此当读取时fscanf函数读取不到数据,导致判断为假,从而出现错误。

解决方法就是将文件指针进行重置 或者 将scanf放入循环体中(因为循环体可以更好控制读取过程。如果在循环中读取失败,可以通过逻辑判断决定是否需要重置文件指针或采取其他措施。)

修复后代码:

/*法一:重置指针*/
void fileOperate_Scanf(FILE *fp)
{
    int sum = 0;
    int arr[10];
    int i = 0;

    rewind(fp);	//将文件指针手动重置
    while (i < 10 && fscanf(fp,"%d",&arr[i++]) == 1)
    {
        printf("%d\n",arr[i-1]);
        sum += arr[i-1];
    }
    printf("总和:%-2d\n",sum);
}

/*法二:放入循环体*/
void fileOperate_Scanf(FILE *fp)
{
    int sum = 0;
    int arr[10];
    int i = 0;

    while (i < 10)
    {
        fscanf(fp,"%d",&arr[i++]);
        printf("%d\n",arr[i-1]);
        sum += arr[i-1];
    }
    printf("总和:%-2d\n",sum);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值