输入与输出
putchar 函数
输出单个字符,
getchar函数
1) getchar函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。
2) 使用本函数前必须包含文件“stdio.h”。
printf函数(格式输出函数)
scanf函数(格式输入函数)
1) scanf函数中没有精度控制,如:scanf("%5.2f",&a);是非法的。不能企图用此语句输入小数为2位的实数。
2) scanf中要求给出变量地址,如给出变量名则会出错。如 scanf("%d",a);是非法的,应改为scnaf("%d",&a);才是合法的。
3) 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。
4) 在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。
语句
switch(表达式),表达式可以是整型、字符型以及枚举类型。
字符串处理函数
puts: 字符串输出函数
gets:字符串输入函数
strcat:字符串连接函数
strcpy:字符串拷贝函数
strcmp:字符串比较函数
strlen:测字符串长度函数,测字符串的实际长度(不含字符串结束标志‘\0’) 并作为函数返值。
用宏定义表示数据类型和用typedef定义数据说明符的区别
宏定义只是简单的字符串代换,是在预处理完成的,而typedef是在编译时处理的,它不是作简单的代换,而是对类型说明符重新命名。被命名的标识符具有类型定义说明的功能。
请看下面的例子:
#define PIN1 int *
typedef (int *) PIN2;
从形式上看这两者相似, 但在实际使用中却不相同。
下面用PIN1,PIN2说明变量时就可以看出它们的区别:
PIN1 a,b;在宏代换后变成:
int *a,b;
表示a是指向整型的指针变量,而b是整型变量。
然而:
PIN2 a,b;
表示 a,b都是指向整型的指针变量。因为PIN2是一个类型说明符。由这个例子可见,宏定义虽然也可表示数据类型,但毕竟是作字符代换。在使用时要分外小心,以避出错。
带参的宏和带参函数区别
带参的宏和带参函数很相似,但有本质上的不同,除上面已谈到的各点外,把同一表达式用函数处理与用宏处理两者的结果有可能是不同的。
数组作函数参数
归纳起来,如果有一个实参数组,想在函数中改变此数组的元素的值,实参与形参的对应关系有以下4种:
1) 形参和实参都是数组名。
main()
{int a[10];
……
f(a,10)
……
f(int x[],int n)
{
……
}
}
a和x指的是同一组数组。
2) 实用数组,形参用指针变量。
main()
{int a[10];
……
f(a,10)
……
f(int *x,int n)
{
……
}
}
3) 实参、型参都用指针变量。
4) 实参为指针变量,型参为数组名。
字符数组和字符串指针变量的区别
用字符数组和字符串指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题:
1. 字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。
2. 对字符串指针方式
char *ps="C Language";
可以写为:
char *ps;
ps="C Language";
而对数组方式:
static char st[]={"C Language"};
不能写为:
char st[20];
st={"C Language"};
而只能对字符数组的各元素逐个赋值。
从以上几点可以看出字符串指针变量与字符数组在使用时的区别,同时也可看出使用指针变量更加方便。
前面说过,当一个指针变量在未取得确定地址前使用是危险的,容易引起错误。但是对指针变量直接赋值是可以的。因为C系统对指针变量赋值时要给以确定的地址。
因此,
char *ps="C Langage";
或者
char *ps;
ps="C Language";
都是合法的。
使用本函数前必须要用文件包含命令:#include<stdio.h>。
有关指针的数据类型的小结
定义 |
含 义 |
int i; |
定义整型变量i |
int *p |
p为指向整型数据的指针变量 |
int a[n]; |
定义整型数组a,它有n个元素 |
int *p[n]; |
定义指针数组p,它由n个指向整型数据的指针元素组成 |
int (*p)[n]; |
p为指向含n个元素的一维数组的指针变量 |
int f(); |
f为带回整型函数值的函数 |
int *p(); |
p为带回一个指针的函数,该指针指向整型数据 |
int (*p)(); |
p为指向函数的指针,该函数返回一个整型值 |
int **p; |
P是一个指针变量,它指向一个指向整型数据的指针变量 |
动态存储分配
1. 分配内存空间函数malloc
2. 分配内存空间函数 calloc
3. 释放内存空间函数free
文件操作
文件的打开(fopen函数)
文件指针名=fopen(文件名,使用文件方式);
FILE *fp;
fp=("file a","r");
文件关闭函数(fclose函数)
fclose(文件指针);
fclose(fp);
文件的读写
对文件的读和写是最常用的文件操作。在C语言中提供了多种文件读写的函数:
字符读写函数 :fgetc和fputc
字符串读写函数:fgets和fputs
数据块读写函数:freed和fwrite
格式化读写函数:fscanf和fprinf
下面分别予以介绍。使用以上函数都要求包含头文件stdio.h。
1. 分配内存空间函数malloc
2. 分配内存空间函数 calloc
文件的随机读写
移动文件内部位置指针的函数主要有两个,即 rewind 函数和fseek函数。
文件检测函数
文件结束检测函数feof函数:feof(文件指针)
读写文件出错检测函数:ferror(文件指针)
文件出错标志和文件结束标志置0函数:clearerr(文件指针)
1. C系统把文件当作一个“流”,按字节进行处理。
2. C文件按编码方式分为二进制文件和ASCII文件。