zoukankan      html  css  js  c++  java
  • 输入输出流总结

    1.int getchar(void);//有错返回EOF,也可以指定返回值为char变量,因为这个字符包含于低位字节中(高位字节通常为0)

    行缓冲输入:在键入的字符实际传送给程序之前必须敲入一个回车键。

    2.int putchar(int c);//只有其低位字节被实际输出到屏幕上

    返回被写入的字符,若操作失败,返回EOF(宏EOF被定义于stdio.h中,通常其值为-1)

    3. int getch(void);    

      int getche(void);//不需要回车清空缓冲区

    在头文件conio.h中,对于某些编译器中这些函数前面有一下划线_getch()和_getche()

    4.char* gets(char* str);

    测试代码:

        char str[2345];
        char* res ;
        res = gets(str);
        str[18] = '';
        printf("%s
    ",str);
        printf("%s
    ",res);

    解析:str以数组形式申请,为指针常量,即不能改变指针的指向。是申请了地址空间的指针常量。

    或者也可以写成char* str = (char*) malloc(2345);  res不能以指针常量形式申请,因为返回的是指针,不能改变res的指向。

    5.int puts(const char* str);//不能输出数字或进行格式转换,所以与printf比较使用的空间少,速度快

        char str[] = "hello";
        int res = puts(str);
        cout<<res<<endl;

    返回值为0;如果错误则为EOF

    6、int printf(const char* control_string,...);

    printf()函数返回写入字符的数目,如果出现一个错误,则返回control_string(控制串)有两种类型项目组成。第一类由将打印在屏幕上的字符串组成,第二类包括自定义其后变元显示方式的格式限定符。格式限定符以一个百分号开头,后跟格式化码,变元列表中的变元数与格式限定符完全相等,格式限定符与变元按顺序从左到右匹配。

    7、int scanf(const char* control_string...);

    可以读入各种内嵌类型并自动将其转换为适当的格式。返回成功的赋予了一个值的数据项。如果出现一个错误,scanf()返回EOF。控制串包括三类字符:

    a、格式限定符 b、空白字符 c、非空白字符

    8、FILE* fopen(const char*filename,const*char* mode)

    打开一个文件

    mode合法值如下:

    r   为读操作打开一个文本文件

    w   为写操作创建一个文本文件

    a  附加到一个文本文件

    rb  为读操作打开一个二进制文件

    wb  为写操作创建一个二进制文件

    ab  附加到一个二进制文件

    r+  为读/写操作打开一个文本文件

    w+   为读/写操作创建一个文本文件

    a+  为读/写操作附加或创建一个文本文件

    r+b  为读/写操作打开一个二进制文件

    w+b  为读/写操作创建一个二进制文件

    a+b  为读/写操作附加一个二进制文件

    如果打开文件失败,fopen()返回一个空指针。

    9、int fclose(FILE* fp);//返回0标志着文件关闭成功。如果关闭失败,则返回EOF。

       关闭一个由fopen()打开的文件,把留在磁盘缓冲区的数据写入文件并在操作系统级正式关闭文件。关闭流文件失败会产生各种麻烦,如:丢失数据,破坏文件和程序中出现间歇的错误等。标准函数ferror()来确定和报告出错消息

    10、int putc(int ch,FILE* fp);

    把一个字符写到文件中,如果操作成功,则函数返回被输出的字节;否则,返回EOF

    11、int getc(FILE* fp);

    从某一文件读一个字符,函数getc()读到文件尾时返回EOF标志,如果发生错误,也返回EOF。

    12、fgetc(),同getc()

    13、int fgets(const char*str,int length,FILE* fp);

    fgets只能读取N-1个字符,包括最后的' ',读完结束后系统将自动在最后加''(gets读完结束后系统自动会将' '置换成'')。

    当你从键盘上输入<=N-1个字符(包括' ')时,那么字符串str会以‘ ’结尾。这就造成了strlen(str)比你想象的大 1 

       char s1[N];
       char s2[N];
       fgets(s1, N, stdin);
       if(s1[strlen(s1) - 1] == '
    ') {      // 去掉换行符
            s1[strlen(s1) - 1] = '';
        }
        fflush(stdin);                               //清空缓冲区
        fgets(s2, N, stdin);
        if(s2[strlen(s2) - 1] == '
    ') {      // 去掉换行符
            s2[strlen(s2) - 1] = '';
        }
    
        printf("%s %s", s1, s2);

    没有fflush的情况下    输入:12345  输出:1234  5

    有fflush: 输入12345  67890  输出 1234   6789  

    将代码中的fgets改成gets   输入:123456  abcdef   输出f abcdef

    14、int fputs(const char*str,FILE*fp),把str指向的字符串写到指定的流中,如果失败,则返回EOF

    15、int feof(FILE* fp);

    若到文件尾,返回真值.既可用于二进制文件,也可应用于文本文件

    eg:

     while(!feof(fp)) ch = getc(fp);

    16、int ferror(FILE* fp);

    函数确定是否在文件操作期间出错。fp是有效的文件指针。在文件操作期间如果有错,则函数返回true,否则返回false。

    17、void rewind(FILE* fp),把文件位置指针重新置于文件的起始位置,fp是有效的文件指针,

    18、int remove(const char*filename),清除一个文件,操作成功,返回0,操作失败返回非零值。

    19、int fflush(FILE* fp);

    清空一个输出流的内容,将任何缓冲区的内容写到与fp相关的文件中,fflush(NULL)清空所有输出流和更新流。操作成功返回0,否则返回EOF。

    20,size_t fread(void* buffer,size_t num_byte,size_t count,FILE* fp);

    buffer 是一个指针,指向一个接收文件中数据的存储区,count的值指出要写多少项。返回读入的项的数目,如遇到文件的结尾或操作失败。这个值可能少于count。

    21、size_t fwrite(const void * buffer,size_t num_byte,size_t count ,FILE* fp);

    buffer 是一个指针,指向要写入文件中的信息快。count的值指出要写多少项。返回写入项的数目,这个值永远等于count,除非操作失败。

    注意:size_t类型被定义为某种无符号整数,fp是指向已经打开流的文件指针。fwrite()和fread()最大的用途之一是可以写用户自定义的数据类型,特别是结构体类型

    22、int fseek(FILE* fp,long int numbytes,int origin);

    fp是由fopen()返回的指针,numbytes是从文件的origin位置到当前位置的字节,是下面的宏之一:

    origin      宏名

    文件开始处    SEEK_SET

    当前位置    SEEK_CUR

    文件末尾    SEEK_END

    可以用fseek()来寻找任何数据类型的倍数,方法是用想要的项数乘以数据的长度。eg:fseek(fp,9*sizeof(struct myStruct),SEEK_SET);

    23、long int ftell(FILE* fp);

    决定一个文件的当前位置,返回与fp关联的文件的当前位置的地址。如果失败,返回-1.

    24、int fprintf(FILE* fp,const char* control_string...);

    int fscanf(FILE* fp,const char* control_string...);

    注意:尽管fprintf()和scanf()是从磁盘文件中读写数据最容易的方法,但却并不是最有效的方法。由于格式化的ASCⅡ数据写入文件的格式与在屏幕上显示的相同(而不是二进制方式),因而调用时要引起额外的开销。如果要考虑速度与文件长度,最好使用fread()和fwrite()

    cin、cout、cerr和C的stdin、stdout、stderr相对应。

  • 相关阅读:
    Scrapy框架基础使用
    python爬虫练习--爬取今日头条街拍图片
    python爬虫练习--爬取所有微博
    python爬虫练习--爬取猫眼热映口碑榜
    python练习---校园管理系统
    python爬虫练习--爬取猫眼top100电影信息
    基础篇-Python的urllib库
    1--爬虫环境安装篇
    Confluence 如何查看页面 ID
    导入 Gradle 项目到 IntelliJ IDEA
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/9329449.html
Copyright © 2011-2022 走看看