fseek()函数用法

i945800687 2012-04-09 04:06:32

如图,为什么当first=0、1的时候,程序分别输出2个空格,1个空格
然后当first=2时程序才开始从最后一个字母倒退
...全文
1379 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
i945800687 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
推荐使用WinHex软件查看文件或内存中的原始字节内容。

不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当……
[/Quote]
就是哈,两个不一样
i945800687 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
本来EOF就不是一个字符。
[/Quote]
嗯,可能是这么回事
赵4老师 2012-04-09
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看文件或内存中的原始字节内容。

不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了
pengzhixi 2012-04-09
  • 打赏
  • 举报
回复
本来EOF就不是一个字符。
i945800687 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
for (first = 0L; first <= last; ++first)
first是不是应该从1开始?
最后那个是EOF
[/Quote]
书上是从1开始的,我自己改成0来测试一下
如果说最后一个是EOF,那么输出显示就是2个空格?
我记得EOF显示出来好像是-1
pengzhixi 2012-04-09
  • 打赏
  • 举报
回复
for (first = 1L; first <= last; ++first)
i945800687 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
fprintf(fp, "%s ", words);
与你%s后面的空格有关系吧
[/Quote]
确实,但为什么first=0的时候倒退了2格
first=1应该就是空格的情况吧
i945800687 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
fp = fopen("words", "a+")) == NULL fopen(words,"a+")
[/Quote]
不要双引号打不开文件
justkk 2012-04-09
  • 打赏
  • 举报
回复
for (first = 0L; first <= last; ++first)
first是不是应该从1开始?
最后那个是EOF
justkk 2012-04-09
  • 打赏
  • 举报
回复
fprintf(fp, "%s ", words);
与你%s后面的空格有关系吧
pengzhixi 2012-04-09
  • 打赏
  • 举报
回复
fp = fopen("words", "a+")) == NULL fopen(words,"a+")
i945800687 2012-04-09
  • 打赏
  • 举报
回复

/* addaword.c -- uses fprintf(), fscanf(), and rewind() */
/* 文件测试程序 */
#include <stdio.h>
#include <stdlib.h>

#define MAX 100
#define CNTL_Z '\032' //DOS文本文件中的文件结尾标记

int main(void)
{
FILE *fp;
char words[MAX];
long first, last;
char c;

if ((fp = fopen("words", "a+")) == NULL) //不能打开文件就返回NULL
{
fprintf(stdout, "Can't open \"words\" file\n");
exit(1);
}
printf("Input words:\n");

while (gets(words) != NULL)
{
fprintf(fp, "%s ", words);
}

puts("File contents:"); //文件内容
rewind(fp); //rewind()命令使程序回到文件开始处,这样
//最后的while循环就可以打印文件的内容

while (fscanf(fp, "%s", words) == 1)
{
puts(words);
}

fseek(fp, 0L, SEEK_END);
last = ftell(fp);

for (first = 0L; first <= last; ++first)
{
fseek(fp, -first, SEEK_END);
c = getc(fp);
if (c!=CNTL_Z && c!='\r')
{
putchar(c);
}
}
putchar('\n');

if (fclose(fp) != 0)
{
fprintf(stderr, "Error closing file\n");
}

return 0;
}

程序运行后如下

Input words:
0123456789 abcdefghijklmn
^Z

File contents:
0123456789
abcdefghijklmn
nmlkjihgfedcba 9876543210
请按任意键继续...

fseek(fp, 0L, SEEK_END);
last = ftell(fp);

for (first = 0L; first <= last; ++first)
{
fseek(fp, -first, SEEK_END);
c = getc(fp);
if (c!=CNTL_Z && c!='\r')
{
putchar(c);
}
}


为什么当first=0、1的时候,程序分别输出2个空格,1个空格
然后当first=2时程序才开始从最后一个字母倒退
justkk 2012-04-09
  • 打赏
  • 举报
回复
看不见图片,直接贴程序吧

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧