为什么 rewind() 在这个简单的程序中没有按预期工作?
Why is rewind() not working as expected in this simple program?
为什么下面的程序没有按预期打印新创建的文本文件 ("E") 的第一个字符?这是一个简单的程序,我试图从各个方面来看问题,但找不到原因。正在我的 D 盘上创建内容为“EFGHI”的文本文件,但由于某些原因 "E" 未被读取即使我使用 getc()
倒带阅读并且输出是 -1.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x;
FILE *fp;
fp=fopen("F:\demo.txt","w");
if(fp==NULL)
puts("Write error");
fputs("EFGHI",fp);
rewind(fp);
x=getc(fp);
printf("%d",x);
fclose(fp);
}
更新:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x;
FILE *fp;
fp=fopen("F:\demo.txt","w+");
if(fp==NULL)
{
puts("Write error");
exit(EXIT_SUCCESS);
}
fputs("EFGHI",fp);
rewind(fp);
while(!feof(fp))
{
x=getc(fp);
printf("%d\n",x);
}
fclose(fp);
}
文件模式"w"
打开文件只用于写入。
使用"w+"
打开文件进行写入和读取。
(更多文件模式请参见man fopen
。)
关于 getc()
返回 -1
,来自 man getc
的逐字记录:
[...] getc() [...] return[s] the character read as an unsigned char
cast to an int
or EOF on end of file or error.
EOF
通常等于 -1
。要对此进行测试,请执行 printf("EOF=%d\n", EOF);
fp=fopen("F:\demo.txt","w");
打开文件进行写入,然后您尝试从中读取。那是行不通的。
我还会注意到您的程序一直在尝试使用 fp
,即使它创建失败也是如此,因为您的 if
检查 fp
只打印错误,它不会'不要停止程序。
为什么下面的程序没有按预期打印新创建的文本文件 ("E") 的第一个字符?这是一个简单的程序,我试图从各个方面来看问题,但找不到原因。正在我的 D 盘上创建内容为“EFGHI”的文本文件,但由于某些原因 "E" 未被读取即使我使用 getc()
倒带阅读并且输出是 -1.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x;
FILE *fp;
fp=fopen("F:\demo.txt","w");
if(fp==NULL)
puts("Write error");
fputs("EFGHI",fp);
rewind(fp);
x=getc(fp);
printf("%d",x);
fclose(fp);
}
更新:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x;
FILE *fp;
fp=fopen("F:\demo.txt","w+");
if(fp==NULL)
{
puts("Write error");
exit(EXIT_SUCCESS);
}
fputs("EFGHI",fp);
rewind(fp);
while(!feof(fp))
{
x=getc(fp);
printf("%d\n",x);
}
fclose(fp);
}
文件模式"w"
打开文件只用于写入。
使用"w+"
打开文件进行写入和读取。
(更多文件模式请参见man fopen
。)
关于 getc()
返回 -1
,来自 man getc
的逐字记录:
[...] getc() [...] return[s] the character read as an
unsigned char
cast to anint
or EOF on end of file or error.
EOF
通常等于 -1
。要对此进行测试,请执行 printf("EOF=%d\n", EOF);
fp=fopen("F:\demo.txt","w");
打开文件进行写入,然后您尝试从中读取。那是行不通的。
我还会注意到您的程序一直在尝试使用 fp
,即使它创建失败也是如此,因为您的 if
检查 fp
只打印错误,它不会'不要停止程序。