鱼C论坛

 找回密码
 立即注册
查看: 1125|回复: 1

[已解决]求指点,关于fseek()在文件结尾处莫名出现一个换行符

[复制链接]
发表于 2023-4-4 18:44:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下。其中fopen打开的文件中只有一串数字1234567890。


1 #include <stdio.h>
  2 #include <stdlib.h>
  3                                                                                                                                            
  4 int main(void)
  5 {   
  6     char ch;
  7     FILE * fp;
  8     
  9     fp = fopen("num", "rb");
 10     fseek(fp, -1L, SEEK_END);
 11     ch = getc(fp);
 12     fclose(fp); 
 13     if ('\n' == ch)
 14         puts("aaa");
 15     else
 16         putchar(ch);
 17 
运行结果为:

[root@localhost test13]# ./a.out
aaa
[root@localhost test13]# 
这个换行符哪来的呢?



最佳答案
2023-4-4 18:46:58
首先,确认一下 "num" 文件是否以换行符结束。有时编辑器会在文件结尾自动添加换行符。

你可以尝试以下方法来查看 "num" 文件的内容:
cat -A num

这个命令会显示文件中的所有字符,包括换行符。如果文件的结尾是一个换行符(通常显示为 $ 符号),那么你的代码的输出就是正确的。

另外,在使用 fseek() 函数时,建议检查其返回值是否为 0,以确保定位操作成功。

以下是你的代码的一个修改版本,加入了错误检查:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char ch;
    FILE *fp;

    fp = fopen("num", "rb");
    if (!fp)
    {
        perror("Error opening file");
        exit(EXIT_FAILURE);
    }

    if (fseek(fp, -1L, SEEK_END) != 0)
    {
        perror("Error seeking in file");
        fclose(fp);
        exit(EXIT_FAILURE);
    }

    ch = getc(fp);
    fclose(fp);

    if ('\n' == ch)
        puts("aaa");
    else
        putchar(ch);

    return 0;
}

这个修改后的代码会检查 fopen() 和 fseek() 的返回值,并在遇到错误时输出错误信息。如果问题仍然存在,可以进一步检查文件的内容和格式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-4 18:46:58 | 显示全部楼层    本楼为最佳答案   
首先,确认一下 "num" 文件是否以换行符结束。有时编辑器会在文件结尾自动添加换行符。

你可以尝试以下方法来查看 "num" 文件的内容:
cat -A num

这个命令会显示文件中的所有字符,包括换行符。如果文件的结尾是一个换行符(通常显示为 $ 符号),那么你的代码的输出就是正确的。

另外,在使用 fseek() 函数时,建议检查其返回值是否为 0,以确保定位操作成功。

以下是你的代码的一个修改版本,加入了错误检查:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char ch;
    FILE *fp;

    fp = fopen("num", "rb");
    if (!fp)
    {
        perror("Error opening file");
        exit(EXIT_FAILURE);
    }

    if (fseek(fp, -1L, SEEK_END) != 0)
    {
        perror("Error seeking in file");
        fclose(fp);
        exit(EXIT_FAILURE);
    }

    ch = getc(fp);
    fclose(fp);

    if ('\n' == ch)
        puts("aaa");
    else
        putchar(ch);

    return 0;
}

这个修改后的代码会检查 fopen() 和 fseek() 的返回值,并在遇到错误时输出错误信息。如果问题仍然存在,可以进一步检查文件的内容和格式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-17 08:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表