chapter 8 in C primer plus

本文介绍了C语言中的字符输入输出函数getchar和putchar,详细阐述了缓冲区类型及其在文件操作中的应用。同时,讲解了如何利用EOF判断文件结束,以及不同操作系统中文件尾部的标识。此外,讨论了重定向输入输出在文件拷贝中的作用,并提供了示例代码。最后,提到了getchar与scanf在处理空白字符上的差异,强调了注意空白字符对程序的影响。
摘要由CSDN通过智能技术生成

1、 getchar() 和putchar()

                一个一个字符的读取和输出

2、以上宏使用缓存区进行输出刷新

        两种缓冲区:

                1、完全缓冲区 fully buffered

                                当缓冲区满的时候被清空,即缓冲区满的时候将内容刷新到目的地。一般出现在文件输入中。 缓冲区大小一般为512或者4096字节

                2、行缓冲区: line buffered

                          当遇到换行符的时候,就将缓冲区的内容进行清空,刷新。例如:键盘输入是标准的行缓冲。

3、c中getchar() 在到达文件结尾时返回一个特殊值,而不去管操作系统是如何检测文件结尾的。赋予该值的名称是EOF(end of file),所以监测到文件结尾的返回值是EOF。同样scanf()也是通过检测EOF来判断是否已经到文件尾部。

        EOF 在stdio.h中进行定义: #defien EOF (-1)

        -1 值不出现在ASCII 码表中,而且是负值。

        注释: c语言实际判断文件是否到达尾部的方法是: 判断当前读取的位置与文件的大小进行比较,如果两个值相同那么说明已经到了文件的尾部,这时候读取文件的函数返回EOF。

        一般情况下,现代操作系统都是如此处理是否到达文件尾部的。

        注释2: 早期MS_DOS系统通过在文件的尾部添加^z 来表示文件尾部,也就是说,只要读取到^z 该字符就表示已经读取到了文件尾部。

        注释3:

                window系统文件:

                        行尾是使用的\r\n

                linux 系统文件:

                        行尾是使用的\n

                因此window文件拷贝到linux下格式是不正确的,尤其是可执行的脚本文件将会发生错误。

        注释4: 如果要是通用getchar()中输入结束符号EOF,则必须知道该操作系统结束标记是什么,不可简单的输入EOF、-1 来结束输入。有些系统是痛ctrl+D, 有些系统是痛ctrl+z等

4、重定向

        <  重定向输入

        >  重定向输出

        

/* echo.c -- */

#include <stdio.h>

int main(void)
{
    char ch;

    while((ch=getchar()) != EOF)
    {
        putchar(ch);
    }


    return 0;
}

编译对象为a.out

   执行: a.out < filename  将文件filename中的内容输入到a.out程序中

   执行: a.out > filename  将输入流中的内容,重定向输出到filename文件中。

    文件拷贝:        多个重定向

        a.out < sourcefile > distiname  将sourcefile文件拷贝到distiname文件中

5、实例代码:打印文件内容

/* file_eof.c -- */
#include <stdio.h>

#include <stdlib.h>

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

    char fname[50];

    printf("Please enter the name of the file:");

    scan("%s",fname);

    fp = fopen(fname,"r");

    if(fp == NULL)
    {
        printf("Failed to open file ");
        exit(1);
    }
    while((ch=getc(fp)) != EOF)
    {
        putchar(ch);
    }
    fclose(fp);

    return 0;
}

6 、

        getchar 会获取每一个字符,不会遗漏任何字符

        scanf 读取输入的时候会跳过空白字符,包括制表符、空白符、换行符。即scanf以遇到的第一个空白符为一个整体进行输入读取。返回值成功读取到的数据个数。

7、在c语言的输入输出函数中尤其要注意:空白字符和换行符号等不可见字符对程序的影响。

   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值