1、逐个读取整数并求和
通过 fread
函数逐个读取文件中的整数并累加。
#include <stdio.h> int main() { FILE *file = fopen("integers.bin", "rb"); if (file == NULL) { perror("打开文件失败"); return 1; } int sum = 0; int number; while (fread(&number, sizeof(int), 1, file) == 1) { sum += number; } fclose(file); printf("整数之和: %d\n", sum); return 0; }
2、一次性读取所有数据到缓冲区并求和
通过一次性将文件内容读入缓冲区,减少了多次 fread
的开销。
#include <stdio.h> #include <stdlib.h> int main() { FILE *file = fopen("integers.bin", "rb"); if (file == NULL) { perror("打开文件失败"); return 1; } fseek(file, 0, SEEK_END); long fileSize = ftell(file); fseek(file, 0, SEEK_SET); int *buffer = (int*)malloc(fileSize); if (buffer == NULL) { perror("内存分配失败"); fclose(file); return 1; } fread(buffer, fileSize, 1, file); fclose(file); int sum = 0; int count = fileSize / sizeof(int); for (int i = 0; i < count; i++) { sum += buffer[i]; } free(buffer); printf("整数之和: %d\n", sum); return 0; }
3、逐行读取整数字符串并求和
如果二进制文件中的数据是以文本形式保存的(例如整数存储为字符串形式),可以逐行读取并转换为整数后求和。
#include <stdio.h> #include <stdlib.h> int main() { FILE *file = fopen("integers.bin", "rb"); if (file == NULL) { perror("打开文件失败"); return 1; } int sum = 0; char line[256]; while (fgets(line, sizeof(line), file)) { sum += atoi(line); } fclose(file); printf("整数之和: %d\n", sum); return 0; }
4、使用系统调用
通过使用系统调用如read,直接从文件描述符读取数据,计算整数之和。
#include <fcntl.h> #include <unistd.h> #include <string.h> #define BUFFER_SIZE 1024 int main() { int fd = open("integers.bin", O_RDONLY); if (fd == -1) { perror("Failed to open file"); return 1; } int buffer[BUFFER_SIZE]; int sum = 0; ssize_t bytes_read; while ((bytes_read = read(fd, buffer, sizeof(buffer))) > 0) { for (size_t i = 0; i < bytes_read / sizeof(int); i++) { sum += buffer[i]; } } close(fd); printf("Sum of integers: %d\n", sum); return 0; }