I/o输入与输出函数
要说到I/O函数,就不得不提到一个概念——流。就c语言来说 ,所有的I/O操作都是简单的从程序中移入与
移出字节的问题。因此 ,便引入了字节流这件东西。
绝大多数的流是完全缓冲的,这就说明 "读取"与 "写入",其实是从一块缓冲区的
内存区域
中来取得数据的。
用于输出流
的缓冲区,只有被写满时,才会被刷新 (fflush), 写入到文件中。
fflush() 函数的作用就是, 不管缓冲区有没有被 写满,都会迫使缓冲区中的数据,立即写入。
流 ,又可以分为文本流 和二进制流 。
文本流
顾名思义 ,就是以文本的形式显示的流 ,文本流中 ,文本行的最大长度 ,标准规定 ,至少允许254 个字符,
另外,文本行的结束方式 ,在不同的系统下是不同的:
在MS-DOS系统中,文本文件规定,以一个换行符与回车符 结尾;在Linux系统中只能以一个换行符结尾。
二进制流
二进制流,就是将流中数据 ,以二进制的形式,存储到文件中 。而且 ,完全根据二进制的形式 从文件中读到
程序中。并没有做什么改变 ,这种流适用于 非文本数据。
流I/O总览
流可分为 标准流 和 文件流
标准流 有 stdin 标准输入流
stdout 标准输出流
stderr 标准错误流
文件流 表示的是 文件读写是定义的流
格式为 FILE *fp fp就表示一个文件流
另外 ,文件流 每次使用时 ,要用fopen打开流 ,使用结束后要用fclose
关闭流
而,标准流则会,自动打开,自动关闭。
标准流的I/O函数
以三种基本形式处理数据 :单个数据 ,文本行 ,二
进
制数据;
输入与输出函数家族
下面就是我用代码来演示一些函数的功能
代码运行 getchar函数
这段代码的作用是将一串字符串数字转换微整形数据
isdigit函数判断是不是数字字符
int main()
{
char ch =0 ;
int ret = 0;
while(isdigit(ch = getchar()))
{
ret = ret *10 + ch -'0';
}
printf("%d\n",ret);
system("pause");
return 0;
}
代码运行getc函数
这段代码的作用就是 完整复制一个文本文件
int main(int argc ,char *argv[])
{
FILE *pfr = NULL;
FILE *pfw = NULL;
char ch= 0;
if(argc < 3)
{
printf("参数不够;\n");
exit(EXIT_FAILURE);
}
pfr = fopen(argv[1],"r");
if(pfr ==NULL)
{
perror("Read error:");
exit(EXIT_FAILURE);
}
pfw = fopen(argv[2],"w");
if(pfw ==NULL)
{
perror("Write error:");
fclose(pfr);
exit(EXIT_FAILURE);
}
while((ch = getc(pfr))!= EOF)
{
putc(ch,pfw);
}
fclose(pfr);
fclose(pfw);
system("pause");
return 0;
}
了解sprintf 函数与sscanf的作用
sprin
tf 将不同类型的数据写入到 字符串内存中
sscanf 将字符串内存中的数据对应读取到 不同类型的数据中
<span style="font-size:18px;">typedef struct stu
{
char name[6];
int age;
float score;
}stu;
int main()
{
char arr[40]={"wangwu 20 39.0f"};
stu s;
strcpy(s.name , "lisi");
s.age = 20;
s.score= 90.0f;
/*sprintf(arr,"%s %d %f",s.name ,s.age,s.score);*/
sscanf(arr,"%s%d%f",s.name,&s.age,&s.score);
printf("%s\n",arr);
system("pause");
return 0;
}</span>
撤销字符I/O函数 ungetc
当你从一个流中读取 一串数字,在读取之前,你无法知道下个字符,必须连续读取 , 直到一个非数字
为止,但又不希望丢失这个字符 ,该怎么办?
这时就会用到 这个函数
int ungetc( intc, FILE *stream );
函数的参数为 撤销的字符 与 所在的流
代码的实现
int main()
{
char ch =0 ;
int ret = 0;
while(isdigit(ch = getchar()))
{
ret = ret *10 + ch -'0';
}
printf("%d\n",ret);
ungetc(ch,stdin);
putchar(getchar());
system("pause");
return 0;
}
这篇博客写的不是很好 ,以后会继续努力的