1>scanf()和 printf()//支持格式控制符的输入和输出
scanf()的返回值是成功读入的项目的个数,如:
num=scanf("%d%d",&a,&b);
如果a、b均读入成功,则num 的值为2scanf()除了%c模式之外,在读取输入时,均跳过空白字符(制表符、空格、换行符),直到第一个非空白字符处开始读取,读至遇到下一个空白字符或与正在读取类型不符的字符停止。例如读取下面这个输入行:
-13.45e12# 0
%d模式时,scanf()会读取-13并在小数点处停止,将小数点作为下一个输入字符。然后,scanf()将会把字符序列-13转换成相应的整数值,并将该值存储在目标整型变量中,如果缓冲区前面的是非数字,则scanf()不读入。
%f模式时,scanf()会读取字符-13.45e12,并在#处停止,将它作为下一个输入字符。然后把字符序列-13.45e12转换为相应的浮点数值,并将该值存储在目标浮点型变量中。
%s模式时,scanf()会读取-13.45e12#,并在空格处停止,将这个空格作为下一个输入字符。然后把这10个字符的字符代码存储到目标字符数组中,并在结尾附加一个空字符。
%c模式时,scanf()会读取并存储第一个字符,在这里是一个空字符。
printf()的返回值是当前次输出的字符个数( 一个字节的标准)。
2>getchar() 和 putchar()//单个字符的输入和输出
getchar()每次读取一个字符。如控制台输入jigf按下回车键时,仅读取j
getchar()多用于逐个读取字符,一般使用行缓冲。如:
while((ch=getchar())!='\n')
{
……
}
当键盘输入一段字符并最后按下回车键后,getchar()开始从j键盘缓冲区逐个读取并赋予ch,putchar()每次打印一个字符,括号中的参数可以是数字,字符型变量,单引号引起来的字符,打印结果均为参数对应的字符。
返回值:(1)当输出正确时,返回输出字符转换为的unsigned int 值;(2)当输出错误时,返回EOF文件结束符。
3>gets()和 puts()//字符串的输入和输出
gets()用于字符串的读取,使用行缓冲,从键盘输入一段字符并下回车键时,开始从键盘缓冲区读取,并丢弃换行符\n,自动添加空字符\0。gets()的缺点是当输入的字符数超过了用来存放的字符型数组的大小,就会溢出到相邻的内存中。
puts()用于字符串的输出,并于结尾自动添加换行符\n。
4>fopen()和 fclose()
fopen()用于打开文件,有两个参数,第一个是要打开的文件名,更确切地说是包含该文件名的字符串的地址;第二个是用于指定文件打开模式的一个字符串。函数的返回值是一个文件指针,该指针用于其他函数(例如fgets()等)操作指定的文件。(示范见于下面其它文件操作函数的例子代码)
fopen()的模式参数列表:
"r" | 打开一个文本文件,可以读取文件 |
"w" | 打开一个文本文件,可以写入文件,先将文件长度截为0,如果文件不存在则先创建之 |
"a" | 打开一个文本文件,可以写入文件,向已有的文件尾部追加内容,如果该文件不存在则先创建之 |
"r+" | 打开一个文本文件,可以进行更新(读取和写入)文件 |
"w+" | 打开一个文本文件,可以进行更新(读取和写入)文件,如果文件存在则先将其长度截为0,如果文件不存在则先创建之 |
"a+" | 打开一个文本文件,可以进行更新(读取和写入)文件,如果该文件存在则先将其长度截为0,如果文件不存在则先创建之 |
"rb","wb","ab", "rb+","wb+","ab+", "r+b","w+b","a+b" | 与前面的模式相似,只是使用二进制模式而非文本模式打开文件 |
fclose(fp)用于关闭由指针fp指定的文件。
5>fgets()和 fputs()//偏向于向文件读取和输出字符串,但同样可以选择从键盘读取和向屏幕输出
fgets()要接受三个参数,当如下面这样使用时,其作用和gets()几乎一样,不同的是它并不丢弃换行符\n而是读取并存储它:
char name[8];
puts("请输入你的名字:");
fgets(name,8,stdin);//8限定最多读取7个字符或者读完一个换行符为止,stdin表示从键盘上读取数据
char name[]={"司马光"};
fputs(name,6,stdout);//参数6控制输出字符,stdout表示输出至屏幕
当它们对文件进行操作的示例:
char ch [500];
FILE * fp=fopen("D:\\88.txt","r");
fgets(ch,strlen(ch)+1,fp);//从文件88.txt读取并存储至ch中
fclose(fp);
char ch[]={"Noting is impossible to a willing heart !"};
FILE * fp=fopen("D:\\88.txt","w");
fputs(ch,strlen(ch),fp);//把ch中的字符输出至文件88.txt中
fclose(fp);
fgets()返回值
fputs()返回值>=0表示写入成功,返回值=-1(EOF)表示写入失败6>fscanf()和 fprintf()//偏向于操作文件的、支持格式控制符的输入输出函数
fscanf()/ fprintf()的使用与fgets()/fputs()类似,不过前者可以用格式符控制字符格式:
fscanf(char *,%s,stdin);
fprintf(char *,%s,stdout);
fscanf(char *,%s,FILE *);
fprintf(char *,%s,FILE *);
7>fread()和 fwrite()//文件的写入和读取(二进制模式)
fread()用于从文件中读取数据,fwrite()用于向文件中写入数据:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
//读取某盘目录下的文件的内容,写入一个新建的文件
char ch[88];//用来暂时存放读取的数据
FILE*fp1;
FILE*fp2;
//文件指针指向具体文件
if ((fp1 = fopen("D:\\88.txt", "r")) == NULL)
{
fprintf(stderr, "文件读取失败!");
exit(1);
}
if ((fp2 = fopen("D:\\99.txt", "w")) == NULL)
{
fprintf(stderr, "文件写入失败!");
exit(2);
}
fread(ch, 1, sizeof(ch), fp1);//把文件指针fp1指向的文件中的内容读取,并存字符数组ch中
puts(ch);
fclose(fp1);
fwrite(ch, 1, sizeof(ch), fp2);//把字符数组ch中的内容写入文件指针fp2所指的文件中
fclose(fp2);
system("pause");
return 0;
}
8>fseek()和 ftell()
9>fgetpos()和 fsetpos()
10>int ungetc(int c,FILE * FP)
11>int fflush(FILE * fp)
12>setvbuf()