[C++STDlib基础]关于C标准输入输出的操作——C++标准库头文件<cstdio>
总结
/*
_STD_BEGIN
using _CSTD clearerr; using _CSTD fclose; using _CSTD feof;
using _CSTD ferror; using _CSTD fflush; using _CSTD fgetc;
using _CSTD fgetpos; using _CSTD fgets; using _CSTD fopen;
using _CSTD fprintf; using _CSTD fputc; using _CSTD fputs;
using _CSTD fread; using _CSTD freopen; using _CSTD fscanf;
using _CSTD fseek; using _CSTD fsetpos; using _CSTD ftell;
using _CSTD fwrite; using _CSTD getc; using _CSTD getchar;
using _CSTD gets; using _CSTD perror;
using _CSTD putc; using _CSTD putchar;
using _CSTD printf; using _CSTD puts; using _CSTD remove;
using _CSTD rename; using _CSTD rewind; using _CSTD scanf;
using _CSTD setbuf; using _CSTD setvbuf; using _CSTD sprintf;
using _CSTD sscanf; using _CSTD tmpfile; using _CSTD tmpnam;
using _CSTD ungetc; using _CSTD vfprintf; using _CSTD vprintf;
using _CSTD vsprintf;
_STD_END 共40个函数
格式化输入输出(9个):printf,fprintf,sprintf,vprintf,vfprintf,vsprintf,scanf,fscanf,sscanf,
字符的输入输出(11个):fgetc,fgets,fputc,fputs,getc,gets,getchar,putc,puts,putchar,ungetc
直接输入输出(2个):fread,fwrite
文件的操作(4个):remove,rename,tmpfile,tempnam
文件的访问(6个):fclose,fopen,freopen,fflush,setbuf,setvbuf
文件的读写定位(5个):fgetpos,fseek,fsetpos,ftell,rewind
错误句柄(4个):clearerr,feof,ferror,perror
*/
实例
#include <cstdio>
#include <conio.h>
#include <iostream>
using namespace std; /*格式化输入输出
int printf(const char *format, ...); //格式化输出数据
int fprintf(FILE *stream, const char *format, ...); //格式化输出数据至文件
int sprintf(char *str, const char *format, ...); //格式化输出数据至字符串
//与上面不同的是下面只接受固定3个参数,一般都使用上面3个函数
int vprintf(const char *format, va_list arg ); //格式化输出数据
int vfprintf(FILE *stream, const char *format, va_list arg ); //格式化输出数据至文件
int vsprintf(char *str, const char *format, va_list arg ); //格式化输出数据至字符串
*/
void test0()
{
char buffer [50];
int n, a=5, b=3;
n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
printf ("[%s] is a string %d chars long\n",buffer,n); FILE * pFile;
char name [100];
pFile = fopen ("myfile.txt","a+");
for (int n=0 ; n<3 ; n++)
{
puts ("please, enter a name: ");
gets (name);
fprintf (pFile, "Name %d [%-10.10s]\n",n,name);//-:左对齐;10:宽度;.10:精度;s:字符串;宽度是10,其填充也是10个字符
}
fclose (pFile); int i;
printf ("Enter a hexadecimal number: ");
scanf ("%x",&i);
printf ("You have entered %#x (%d).\n",i,i); char sentence []="Rudolph is 12 years old";
char str [20];
int ii;
sscanf (sentence,"%s %*s %d",str,&ii);
printf ("%s -> %d\n",str,ii);//Rudolph -> 12
}
/*字符的输入输出:从文件中,字符串中,从STDIN/STDOUT中 获取或写入字符(串)
int getc ( FILE * stream );//从一个文件读取一个字符
int getchar ( void );//从STDIN(标准输入)读取一个字符
char * gets ( char * str );//从STDIN(标准输入)读取一个字符串
int ungetc ( int character, FILE * stream );//将参数c 字符写回参数stream 所指定的文件流. 这个写回的字符会由下一个读取文件流的函数取得. int puts ( const char * str );//写一个字符串到STDOUT(标准输出)
int putchar ( int character );//写一个字符到STDOUT(标准输出)
int putc ( int character, FILE * stream );//写一个字符到一个流
int scanf(const char *format, ...); //从控制台输入
int fscanf(FILE *stream, const char *format, ...); //从文件输入
int sscanf(char *str, const char *format, ...); //从指定字符串输入 char * fgets ( char * str, int num, FILE * stream );//从一个流获取一串字符
int fgetc ( FILE * stream );//从流获取一个字符
int fputs ( const char * str, FILE * stream );//写一个字符串到一个文件
int fputc ( int character, FILE * stream );//写一个字符到一个文件
*/
void test1()
{
}
/*直接输入输出
int fread( void *buffer, size_t size, size_t num, FILE *stream );//读取[num]个对象(每个对象大小为size(大小)指定的字节数),并把它们替换到由buffer(缓冲区)指定的数组. 数据来自给出的输入流. 函数的返回值是读取的内容数量...
int fwrite( const void *buffer, size_t size, size_t count, FILE *stream );//从数组buffer(缓冲区)中, 写count个大小为size(大小)的对象到stream(流)指定的流. 返回值是已写的对象的数量.
*/
void test2()
{
FILE * pFile;
char buffer[] = { 'x' , 'y' , 'z' };
pFile = fopen ("myfile.bin", "wb");
fwrite (buffer , sizeof(char), sizeof(buffer), pFile);
fclose (pFile);
}
/*文件的操作:删除文件,重命名文件
int remove ( const char * filename );//清除一个文件
int rename ( const char * oldname, const char * newname );//重命名一个文件
FILE *tmpfile( void );//返回一个到一个临时文件的指针
char *tmpnam( char *name );//创建一个独特的文件名并保存在name中
*/
void test3()
{
if( remove( "myfile.txt" ) != 0 )
perror( "Error deleting file" );
else
puts( "File successfully deleted" ); char oldname[] ="oldname.txt";
char newname[] ="newname.txt";
int result= rename( oldname , newname );
if ( result == 0 )
puts ( "File successfully renamed" );
else
perror( "Error renaming file" );
}
/*文件的访问:打开关闭文件,设置缓冲,刷新缓存
FILE * fopen ( const char * filename, const char * mode );//打开一个文件
FILE * freopen ( const char * filename, const char * mode, FILE * stream );//用一个不同的名称打开一个存在的流
int fclose ( FILE * stream );//关闭一个文件
fflush,setbuf,setvbuf
int fflush( FILE *stream );//如果给出的文件流是一个输出流,那么fflush()把输出到缓冲区的内容写入文件. 如果给出的文件流是输入类型的,那么fflush()会清除输入缓冲区. fflush()在调试时很实用,
void setbuf( FILE *stream, char *buffer );//setbuf()函数设置stream(流)使用buffer(缓冲区),如果buffer(缓冲区)是null,关闭缓冲. 如果使用非标准缓冲尺寸, 它应该由BUFSIZ字符决定长度.
int setvbuf( FILE *stream, char *buffer, int mode, size_t size );//函数setvbuf()设置用于stream(流)的缓冲区到buffer(缓冲区),其大小为size(大小). mode(方式)可以是: _IOFBF, 表示完全缓冲 ;_IOLBF, 表示线缓冲 ;_IONBF, 表示无缓存
*/
void test4()
{
FILE * pFile;
pFile = fopen ("myfile.txt","w");
setvbuf ( pFile , NULL , _IOFBF , 1024 );
if (pFile!=NULL)
{
fputs ("fopen example",pFile);
fclose (pFile);
} freopen ("myfile.txt","w",stdout);
printf ("This sentence is redirected to a file.");
fclose (stdout); char buffer[BUFSIZ];
FILE *pFile1, *pFile2;
pFile1=fopen ("myfile.txt","w");
pFile2=fopen ("myfile2.txt","a");
setbuf ( pFile1 , buffer );
fputs ("This is sent to a buffered stream",pFile1);
fflush (pFile1);
setbuf ( pFile2 , NULL );
fputs ("This is sent to an unbuffered stream",pFile2);
fclose (pFile1);
fclose (pFile2);
}
/*文件的读写定位:获取当前位置,设置到开始位置,设置到指定位置,移动到某一位置
int fgetpos ( FILE * stream, fpos_t * pos );//获取文件位置指针
int fsetpos ( FILE * stream, const fpos_t * pos );//在一个文件中移动到一个指定的位置
int fseek ( FILE * stream, long int offset, int origin );//在文件中移动到一个指定的位置;origin的值应该是下列值其中之一(在stdio.h中定义): SEEK_SET 从文件的开始处开始搜索 ;SEEK_CUR 从当前位置开始搜索 ;SEEK_END 从文件的结束处开始搜索 ;fseek()成功时返回0,失败时返回非零.
long int ftell ( FILE * stream );//返回当前文件的位置指针
void rewind ( FILE * stream );//移动文件位置指针到一个文件的开始处
*/
void test5()
{
FILE * pFile;
fpos_t position;
pFile = fopen ("myfile123.txt","w");
fgetpos (pFile, &position);
fputs ("That is a sample",pFile);
fsetpos (pFile, &position);
fputs ("This",pFile);
fseek(pFile,0,SEEK_END);
fputs ( " Hello!!!" , pFile );
fclose (pFile);
}
/*错误句柄
int feof ( FILE * stream );//如果到达文件尾(end-of-file)返回"True"(真)
int ferror( FILE *stream );//检查stream(流)中的错误, 如果没发生错误返回0,否则返回非零
void perror ( const char * str );//输出错误信息到STDOUT
void clearerr( FILE *stream );//清除错误
*/
void test6()
{
FILE * pFile;
int n = 0;
pFile = fopen ("myfile9.txt","rb");
if (pFile==NULL)
{
perror ("Error opening file");
}
else
{
fputc ('x',pFile);
if (ferror (pFile))
{
printf ("Error Writing to myfile.txt\n");
clearerr (pFile);
}
while (fgetc(pFile) != EOF)
{
++n;
}
if (feof(pFile))
{
puts ("End-of-File reached.");
printf ("Total number of bytes read: %d\n", n);
}
else
puts ("End-of-File was not reached.");
fclose (pFile);
} }
void Test(char h)
{
cout<<"press key===="<<h<<endl;
switch(h)
{
case '0': test0();break;
case '1': test1();break;
case '2': test2();break;
case '3': test3();break;
case '4': test4();break;
case '5': test5();break;
case '6': test6();break;
case 27:
case 'q':exit(0);break;
default:cout<<"default "<<h<<endl;break;
}
}
void main()
{
while(1)
{
Test(getch());
}
}
[C++STDlib基础]关于C标准输入输出的操作——C++标准库头文件<cstdio>的更多相关文章
- C++标准库头文件名字和C语言头文件名字的区别
1.C++版本的C标准库头文件,一般是cname,而C语言头文件一般是name.h 2.命名为cname的头文件中定义的名字都是从std中来的,而如果是name.h则不是这样的. 3.与是用name. ...
- C++标准库头文件找不到的问题
当你写C++程序时,在头文件中包含C++标准库的头文件,比如#include <string>,而编译器提示你找不到头文件! 原因就是你的实现源文件扩展名是".c"而不 ...
- C 标准库头文件
头文件 说明 头文件 说明 <assert.h> 条件编译宏,将参数与零比较 <complex.h> (C99 起) 复数运算 <ctype.h> 用来确定包含于字 ...
- 标准库头文件 (CA2T)
标准库中,CA2T,CA2W的头文件是: #include <atlstr.h>
- C++版本的C标准库头文件的特点
C++标准库中除了定义C++语言特有的功能外,也兼容了C语言的标准库.C语言的头文件形如name.h,C++则将这些文件命名为cname.也就是去掉了.h后缀,而在文件名name之前添加了字母c,这里 ...
- [C++STDlib基础]关于日期时间的操作——C++标准库头文件<ctime>
总结 /* A.头文件<ctime> #if _GLOBAL_USING && !defined(RC_INVOKED) _STD_BEGIN 1.四个数据类型 using ...
- [C++STDlib基础]关于单字符的操作——C++标准库头文件<cctype>
网上实例 总结 /* _STD_BEGIN using _CSTD isalnum; using _CSTD isalpha; using _CSTD iscntrl; using _CSTD isd ...
- C++标准库头文件<bits/stdc++.h>
在使用GNU GCC Compiler的时候,你可以包含一个头文件<bits/stdc++.h>,便可以使用C++中的各种标准库,而不用一个一个包含进来. 这在acm比赛中是一种常用的做法 ...
- c++标准头文件
C++标准库的所有头文件都没有扩展名.C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能. <cname>形式的标准头文件[ <complex>例外]其 ...
随机推荐
- Android Studio非gradleproject编译后的apk文件在哪?
非gradle的apk文件位置和gradle有一些差别,怎样找到apk文件在哪?我直接上图吧,选中project,右键: 在windows是选择"show in exlporer" ...
- Springmvc+Spring+Hibernate搭建方法
Springmvc+Spring+Hibernate搭建方法及example 前面两篇文章,分别介绍了Springmvc和Spring的搭建方法,本文再搭建hibernate,并建立SSH最基本的代码 ...
- IntelliJ IDEA对开发者的三大诱惑
IntelliJ IDEA作为最聪明的Java开发工具,不在只是对Java语言的支持,其中还包括Scala,Groovy 和其他语言. 对于任何一个开发者,好的工具就是为提高开发效率的.那么Intel ...
- java 学习List 的 add 与set差分法
/** * 在List收集在许多方面.add(int index,Object obj)方法与set(int index,Object e)方法不易区分 * .通过以下实例.能够看出两个方法中的差别 ...
- 【转】Android双向滑动菜单完全解析,教你如何一分钟实现双向滑动特效
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9671609 记得在很早之前,我写了一篇关于Android滑动菜单的文章,其中有一个 ...
- CTP API开发期货自动交易平台概论
题目比较小众,先介绍一下CTP. 综合交易平台CTP(Comprehensive Transaction Platform)是由上海期货信息技术有限公司(上海期货交易所的全资子公司)开发的期货交易平台 ...
- 数据类型和typeof操作符
虽然学习js有一段时间了,但是对js的基础语法却是有些生疏.最近在看jquery源码,决定随带总结一些基础的语法知识.今天总结一下数据类型和typeof,这在写js的时候,是不得不知道的知识. 数据类 ...
- 如何打造100亿SDK累计覆盖量的大数据系统
作为推送行业领导者,截止目前个推SDK累计安装覆盖量达100亿(含海外),接入应用超过43万,独立终端覆盖超过10亿 (含海外).个推系统每天会产生大量的日志和数据,面临许多数据处理方面的挑战. 首先 ...
- Web面试之JQuery
程序员Web面试之JQuery 又到了一年一度的毕业季了,青春散场,却等待下一场开幕. 在求职大军中,IT行业的程序员.码农是工科类大学生的热门选择之一, 尤其是近几年Web的如火如荼,更是吸引了 ...
- ASHX呼叫ASPX.cs的方法
ASHX呼叫ASPX.cs的方法 问题来自论坛,有网友这样的要求,在ASHX内呼叫ASPX.cs的一个方法或函数. 在一个网站中,也许不止只有一个aspx网页.把aspx.cs内的方法宣告为publi ...