C复习手记(Day2)

1、共用体

共用体是一种特殊的结构,允许在相同的位置存储不同的数据类型。可以定义一个带有多成员的共同体,但是任何时候只能有一个成员带有值。

定义共用体:

union Data
{
   int i;
   float f;
   char  str[20];
} data;
共用体占用的内存应足够存储共用体中最大的成员,即data将占用20个字节的内存


2、typedef

ex:
typedef struct
Books{…}Book;
{…
       Book book;
…}

typedef
与#define的区别:
typedef仅限于为类型定义符号名称,#define 不仅可以定义别称,还能为数值定义别名

typedef由编译器执行解释,#define由预编译器进行处理



3、输入输出

  • getchar() & putchar()函数
    int getchar(void)
    函数从屏幕读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读取一个单一的字符。
    int putchar(int c)
    函数把字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。

gets() & puts()函数

char *gets(char *s) 函数从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或
EOF。(stdin:标准输入文件指针)

int puts(const char *s) 函数把字符串 s 和一个尾随的换行符写入到
stdout。(stdout:标准输出文件指针)

  • scanf() & rpintf()函数

int scanf(const char *format, ...) 函数从标准输入流 stdin 读取输入,并根据提供的
format 来浏览输入

int printf(const char *format, ...) 函数把输出写入到标准输出流 stdout
,并根据提供的格式产生输出。

注:format 可以是一个简单的常量字符串,但是您可以分别指定 %s、%d、%c、%f
等来输出或读取字符串、整数、字符或浮点数。

4、文件读写

  • 打开文件

    以使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE
    的一个对象,类型FILE 包含了所有用来控制流的必要的信息。

    ex:    FILE *fopen(const char * filename,const cahr * mode);

    在这里,filename 是字符串,用来命名文件,访问模式 mode 的值可以是下列值中的一个:

    模式 描述
    r 打开一个已有的文本文件,允许读取文件。
    w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,你的程序会从文件的开头写入内容。
    a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
    r+ 打开一个文本文件,允许读写文件。
    w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度???,如果文件不存在,则会创建一个新文件。
    a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

    如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:

  • 关闭文件

int fclose(FILE *fp);

如果成功关闭文件,fclose( ) 函数返回零,如果关闭文件时发生错误,函数返回
EOF。这个函数实际   上,会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。EOF 是一个定义在头文件 stdio.h
中的常量。

  • 写入文件

int fputc(int c,FILE *fp);

函数 fputc() 把参数 c 的字符值写入到 fp
所指向的输出流中。如果写入成功,它会返回写入的字符,如果发生错误,则会返回 EOF

  • 读取文件

    int fgetc(FILE *fp);   //从文件中读取单个字符

    fgetc() 函数从 fp 所指向的输入文件中读取一个字符。返回值是读取的字符,如果发生错误则返回
    EOF。遇到空格即停止;

    char *fgets(char * buf , int n, FILE *fp)

    函数 fgets() 从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区
    buf,并在最后追加一个 null 字符来终止字符串。遇到换行符读取终止;

    也可以使用 int fscanf(FILE *fp, const char *format, ...)
    函数来从文件中读取字符串,但是在遇到第一个空格字符时,它会停止读取。

  • 二进制I/O函数

二进制输入输出:

szie_t fread(void *ptr,size_t size_of_elements,size_t
number_of_elements,FILE *a_file) ;

size_t fwrite(const void *ptr,size_t size_of_elements,size_t
number_of_elements,FILE *a_file);

这两个函数都是用于存储块的读写 - 通常是数组或结构体。

时间: 2025-01-13 07:35:30

C复习手记(Day2)的相关文章

C复习手记(Day3)

C预处理器 C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤.简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理.我们将把 C 预处理器(C Preprocessor)简写为 CPP. 所有的预处理器命令都是以井号(#)开头.它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始.下面列出了所有重要的预处理器指令: 指令 描述 #define 定义宏 #include 包含一个源代码文件 #under 取消已定义的宏 #

C复习手记(Day4)

1.C错误处理 errno.perror() 和sterror() perror() 函数显示您传给它的字符串,后跟一个冒号.一个空格和当前 errno 值的文本表示形式. strerror() 函数,返回一个指针,指针指向当前 errno 值的文本表示形式. 被零除的错误 程序退出状态 通常情况下,程序成功执行完一个操作正常退出的时候会带有值 EXIT_SUCCESS.在这里,EXIT_SUCCESS 是宏,它被定义为 0.如果程序中存在一种错误情况,当您退出程序时,会带有状态值 EXIT_F

python-第一块,笔记整理和学习内容复习(day1 - day2 - day3)

DAY1 学习内容: 今天是培训班开班第一天,第一天,了解了python的历史,发展前景,也喝了Alex老师的一大碗鸡汤.鸡汤是鲜的,然后学习还是要学得. 今天写了python的第一个程序,hello world.突然想起大学的时候学习c语言的时候,写的也是这个.此时此刻,新增所想确实,hello python,i'm coming. 笔记:大写代表常量,例如PIE: ASCII的起源,以及gb2312.gbk.gb18031和utf-8等编码的出生: 注释:单行用#,多行用'''   ''':

【解题】noip2013提高组(day1+day2)

这套题,勾起了我无数美好的回忆←意思是该好好复习了... [day1] 一.转圈游戏 首先,第一题,在处理k的时候应该用快速幂算法. 大概就是下面这样,要注意的是:1.二分时要判断有无余数.2.先设数,在进行乘积运算,不然会递归两次=.= 1 int pow(int a,int pos) 2 { 3 if(pos==1) return a%t; 4 int temp=pow(a,pos/2); 5 if(pos%2==1) return (temp*temp*a)%t; 6 return (te

树状数组复习

今天重新复习了一下树状数组- -发现真的是一个很简洁的东西 引用请注明出处:http://blog.csdn.net/int64ago/article/details/7429868 写下这个标题,其实心里还是没底的,与其说是写博帖,不如说是做总结.第一个接触树状数组还是两年前,用什么语言来形容当时的感觉呢?……太神奇了!真的,无法表达出那种感觉,她是那么的优雅,10行不到的代码,却把事情干的如此出色!没有了解她原理的前提下即使把代码倒背如流也理解不了!其中,我就是一直没搞懂地在使用她.时隔两年

C++基础复习

一. C++与C的比较: C语言是一个结构化语言,它的重点在于算法和数据结构,C语言的设计首先要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到的输出(或实现过程(事物)控制). C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制. 所以C语言和C++的最大区别在于它们解决问题的思想不同,一个面向过程一个面向对象. C++对C的"增强",表现在六个方面: 1.类型检测更为严格. 2.

大量逻辑判断优化的思路——责任链模式复习总结及其和状态模式对比

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的总结知识点如下: 责任链模式概念和例子 使用的条件 和状态模式的比较分析 责任链的优缺点 纯的责任链和不纯的责任链 javax.servlet.Filter#doFilter()方法源码分析 基于AOP思想,模拟一个拦截器 前面说了一个状态模式,总结过程中发现和这个责任链的使用场景很类似,都是为了解耦大量复杂业务逻辑判断的,那么他们有什么不同呢?回忆状态模式——状态模式允许通过改变对象的内部状态而改变对象自身的行为,这个对象

算法分析与设计复习

算法分析与设计复习 2016年初,研一上学期期末考试前,复习并总结算法分析与设计科目的内容.复习过程参照<算法导论>中文第2版,同时参照PPT,章节划分根据PPT内容 概要: 第一章 概述 第二章 插入排序&分治策略 第三章 复杂度分析 第四章 堆与堆排序 第五章 快速排序 第六章 线性时间排序 第一章 概述 算法的应用范围 算法在诸如生物等诸多领域有其应用 算法的意义 算法在很多情况下让不可能完成的事情变成了可能,让处理的很慢的过程变快. 一个铺垫 一串不全为0的数,怎么取能拿到一段

复习PHP-语言参考-预定义接口

1.Traversable 他是一个遍历接口规范 注意:发现一个有用的函数get_declared_classes,可以以数组形式显示当前脚本下所有已经定义的类名 2.Iterator Iterator迭代器继承自Traversable,是一种遍历对象内容的对象. 你可以自己写一个子类继承自它,并写上具体遍历的方法. Iterator包含:current(返回当前元素),key(当前键),next(下一个元素),rewind(返回至初始元素),valid(检测当前元素是否存在)五种方法. 3.I