【发布时间】:2016-04-18 18:34:23
【问题描述】:
这是我的代码 -
#include<stdio.h>
void main()
{
FILE *fp;
fp=fopen("ex.c","w+");
fputs("Hello World\nFile Pointer",fp);
printf("Text - \n");
rewind(fp);
char ch;
while((ch=fgetc(fp))!=EOF)
{
printf("File pointer - %d and letter - ",ftell(fp));
if(ch=='\t')
printf("tab");
else
if(ch=='\n')
printf("newline");
else
putchar(ch);
printf("\n");
}
}
这是我得到的输出 -
Text -
File pointer - 1 and letter - H
File pointer - 2 and letter - e
File pointer - 3 and letter - l
File pointer - 4 and letter - l
File pointer - 5 and letter - o
File pointer - 6 and letter -
File pointer - 7 and letter - W
File pointer - 8 and letter - o
File pointer - 9 and letter - r
File pointer - 10 and letter - l
File pointer - 11 and letter - d
File pointer - 13 and letter - newline
File pointer - 14 and letter - F
File pointer - 15 and letter - i
File pointer - 16 and letter - l
File pointer - 17 and letter - e
File pointer - 18 and letter -
File pointer - 19 and letter - P
File pointer - 20 and letter - o
File pointer - 21 and letter - i
File pointer - 22 and letter - n
File pointer - 23 and letter - t
File pointer - 24 and letter - e
File pointer - 25 and letter - r
但我所期待的是——
Text -
File pointer - 1 and letter - H
File pointer - 2 and letter - e
File pointer - 3 and letter - l
File pointer - 4 and letter - l
File pointer - 5 and letter - o
File pointer - 6 and letter -
File pointer - 7 and letter - W
File pointer - 8 and letter - o
File pointer - 9 and letter - r
File pointer - 10 and letter - l
File pointer - 11 and letter - d
File pointer - 12 and letter - newline
File pointer - 13 and letter - F
File pointer - 14 and letter - i
File pointer - 15 and letter - l
File pointer - 16 and letter - e
File pointer - 17 and letter -
File pointer - 18 and letter - P
File pointer - 19 and letter - o
File pointer - 20 and letter - i
File pointer - 21 and letter - n
File pointer - 22 and letter - t
File pointer - 23 and letter - e
File pointer - 24 and letter - r
它说的那一行 -
File pointer - 13 and letter - newline
我没想到文件指针值会从 11 跳转到 13,但希望它会从 11 变为 12。
这种行为背后的原因是什么?
但是当我在代码中更改这一行时 - fputs("Hello World\nFile Pointer",fp);
到 - fputs("Hello World\tFile Pointer",fp);
我得到了预期的输出。
为什么会这样?
【问题讨论】:
-
再次尝试以二进制模式打开文件或在十六进制编辑器中打开。如果这仍然是个问题,请参阅How to Ask。
-
将
else if(ch=='\r') printf("carriage return");添加到支票中。 -
所以在 Windows 文本文件中换行符是两个字节宽,回车和换行。
-
@EOF 如果文件以文本模式打开,您将永远无法读取
\r字符。 -
@Barmar 如果您在 POSIX 系统上读取 Windows 创建的文本文件怎么办?
标签: c file pointers text-files