【发布时间】:2021-11-29 06:40:07
【问题描述】:
我有一个文本文件,其中每一行都是一个带有换行符的整数。我也有一个相同的 .bin 文件。
10
20
30
40
50
60
70
运行此代码...
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
int input;
FILE *infile_t = fopen("numbers.txt", "r");
FILE *infile_b = fopen("numbers.bin", "rb");
if (infile_t == NULL) {
printf("Error: unable to open file %s\n", "numbers.txt");
exit(1);
}
if (infile_b == NULL) {
printf("Error: unable to open file %s\n", "numbers.bin");
exit(1);
}
printf("Enter an integer index: ");
while(scanf("%d",&input) != EOF){
int ch;
fseek(infile_t, (input*sizeof(int))-1, SEEK_SET);
fscanf(infile_t, "In text file: %d\n", &ch);
printf("In text file: %d\n", ch);
fseek(infile_b, (input*sizeof(int))-1, SEEK_SET);
fscanf(infile_b, "%d\n", &ch);
printf("In binary file: %d\n", ch);
printf("Enter an integer index: ");
}
fclose(infile_t);
fclose(infile_b);
return 0;
}
并连续输入 0、1、2、3、4,我得到输出: 10 0 40 50 0
我试图一次读取文件 4 个字节(每个 int)并打印整数。我做错了什么,如果这是不好的做法,什么会更好?
【问题讨论】:
-
"每次 4 个字节(每个 int)" - 每个
int占用 2 个字节 + 1 或 2 个字节,用于\n或\r\n您显示的文本文件 -
numbers.bin是什么?是您在问题中显示的文本文件吗? -
为什么
4在input*4? -
@Jabberwocky 显然,
numbers.bin是示例文件。而如果文件是在Windows下创建的,一个换行符是两个字节长,所以每行是2个字符+2个字节换行符。 -
我刚刚在 Ubuntu 下测试了你的程序(使用
numbers.bin中的 DOS 行结尾):它工作正常。在其他程序中,我发现FILE *fopen()-type 文件(与int open()-type 文件不同)有时会导致fseek()出现问题。作为一种解决方法,我在fseek()之前和之后使用了fflush():fflush(f); fseek(f,...); fflush(f);