首页 > 解决方案 > 如何将整数加倍并更新它们?

问题描述

目前,在您的帮助下,我能够解决选项 1 的问题,现在我必须将“score.dat”文件的整数加倍并更新它们。我能够获得 double 的值,但我不知道如何在 'score.dat' 中更新它们我猜我必须使用 fwrite() 函数但不太确定。

在此处输入图像描述

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
    FILE *filepointer;
    filepointer = fopen("score.dat", "rb");

    int input;
    int number [20] = {0};
    int doubler = 0;


    while (input != 3)
    {
        printf("1. Read and display all data from 'score.dat' \n");
        printf("2. Multiply all the numbers in 'score.dat' by 2. \n");
        printf("3. Quit. \n");
        printf("Enter your option: ");

        scanf("%d", &input);

        printf("\n");

        switch (input)
        {
            case 1:
                fread(&number, sizeof(int), 20, filepointer);
                printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", number[0], number[1], number[2], number[3], number[4], number[5], number[6], number[7], number[8], number[9], number[10], number[11], number[12], number[13], number[14], number[15], number[16], number[17], number[18], number[19]);
                printf("\n");
                printf("\n");
                break;

            case 2:
                for (int i = 0; i < 20; i++)
                {
                    filepointer = fopen("score.dat", "wb");

                    doubler = number[i] + number[i];
                    number[i] = doubler;
                    fwrite(&number[i], sizeof(int), 1, filepointer);
                }
                printf("\n");

                break;
        }
    }
}

标签: c

解决方案


要根据以前的值修改数据,您需要

  • 以更新模式打开文件 ("r+")
  • 读取现有数据
  • 需要更改数字。
  • 将数据写入文件开头

    case 2:
    
    filepointer = fopen("score.dat", "r+");
    // Add Error check - if (filepointer != NULL ) ...
    
    // Read
    fread(&number, sizeof(int), 20, filepointer);
    
    // Update
    for (int i = 0; i < 20; i++) number[i] *= 2 ;
    
    // Write the data to the beginning of the file
    rewind(filepointer) ;
    fwrite(&number[i], sizeof(int), 20, filepointer);
    
    // Close file
    fclose(filepointer) ;
    ...
    

推荐阅读