The C Programming Language(第 2 版) 笔记 / 7 输入与输出 / 7.7 行输入和行输出

目录、参考文献


7.7 行输入和行输出

标准库提供了一个输入函数 fgets,它和前面几章中用到的函数 getline 类似

char *fgets(char *line, int maxline, FILE *fp)

fgets 函数从 fp 指向的文件中读取下一个输入行(包括换行符)
并将它存放在字符数组 line 中,它最多可读取 maxline - 1 个字符
读取的行将以 '\0' 结尾保存到数组中
通常情况下,fgets 返回 line,但如果遇到了文件结尾或发生了错误,则返回 NULL
我们编写的 getline 函数返回行的长度,这个值更有用,当它为 0 时意味着已经到达了文件的结尾

输出函数 fputs 将一个字符串(不需要包含换行符)写入到一个文件中:

int fputs(char *line, FILE *fp)

如果发生错误,该函数将返回 EOF,否则返回一个非负值

库函数 getsputs 的功能与 fgetsfputs 函数类似,但它们是对 stdinstdout 进行操作
有一点我们需要注意,gets 函数在读取字符串时将删除结尾的换行符('\n'), 而 puts 函数在写入字符串时将在结尾添加一个换行符

下面的代码是标准库中 fgetsfputs 函数的代码:

/* fgets: get at most n chars from iop */ 
char *fgets(char *s, int n, FILE *iop) 
{ 
    register int c; 
    register char *cs; 
    cs = s; 
    while (--n > 0 && (c = getc(iop)) != EOF) 
        if ((*cs++ = c) == '\n') 
            break; 
    *cs = '\0'; 
    return (c == EOF && cs == s) ? NULL : s; 
}

/* fputs: put string s on file iop */ 
int fputs(char *s, FILE *iop) 
{ 
    int c; 
    while (c = *s++) 
        putc(c, iop); 
    return ferror(iop) ? EOF : 0; 
}

ANSI 标准规定,ferror 在发生错误时返回非 0 值,而 fputs 在发生错误时返回 EOF,其它情况返回一个非负值

使用 fgets 函数很容易实现 getline 函数:

/* getline: read a line, return length */ 
int getline(char *line, int max) 
{ 
    if (fgets(line, max, stdin) == NULL) 
        return 0; 
    else 
        return strlen(line); 
}

目录、参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值