输入输出及文件操作_C风格IO函数

因项目需要从文件中读取多组浮点类型数据,专门复习总结了一下C/C++的输入输出操作。

 

C风格输入输出-I/O函数

C 输入 & 输出

C 语言把所有的设备都当作文件。所以设备(比如显示器)被处理的方式与文件相同。以下三个文件会在程序执行时自动打开,以便访问键盘和屏幕。

标准文件

文件指针

设备

标准输入

stdin

键盘

标准输出

stdout

屏幕

标准错误

stderr

您的屏幕

文件指针是访问文件的方式

 

C风格的I/O函数

由<cstdio>和<stdio.h>提供

通用的C输出函数:

int printf(const char* format ...);           //写入stdio

scanf() 函数用于从标准输入(键盘)读取并格式化, printf() 函数发送格式化输出到标准输出(屏幕)。

 

int sprintf(FILE*, const char* format ...);     //写入“文件” (stdout、stderr等)

int fprintf(char* p, const char* format ...);   //写入p[0]...

在格式串format的控制下,产生任意参数序列的格式化输出。格式串里包含两类对象:

普通字符,它们将直接复制到输出流;

转换描述,每个描述导致对下一个参数的转换和输出。每个转换都有%引导。例如,

printf(“%s there are %d numbers.”, my_str, num_of_members);

 

转换描述集相当大,在%之后可以有:

常用的输出控制符主要有以下几个:

控制符

说明

%d

按十进制整型数据的实际长度输出。

%ld

输出长整型数据。

%md

m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补以空格,若大于 m,则按实际位数输出。

%u

输出无符号整型(unsigned)。输出无符号整型时也可以用 %d,这时是将无符号转换成有符号数,然后输出。但编程的时候最好不要这么写,因为这样要进行一次转换,使 CPU 多做一次无用功。

%c

用来输出一个字符。

%f

用来输出实数,包括单精度和双精度%lf,以小数形式输出。不指定字段宽度,由系统自动指定,整数部分全部输出,小数部分输出 6 位,超过 6 位的四舍五入。

%.mf

输出实数时小数点后保留 m 位,注意 m 前面有个点。

%o

以八进制整数形式输出,这个就用得很少了,了解一下就行了。

%s

用来输出字符串。用 %s 输出字符串同前面直接输出字符串是一样的。但是此时要先定义字符数组或字符指针存储或指向字符串,这个稍后再讲。

%x(或 %X %#x %#X

以十六进制形式输出整数,这个很重要。如果是小写的x,输出的字母就是小写的;如果是大写的X,输出的字母就是大写的;如果加一个#,就以标准的十六进制形式输出。

例:

# include <stdio.h>

int main(void)

{

    int i = 47;

    printf("%x\n", i);  

    printf("%X\n", i);  

    printf("%#x\n", i);  

    printf("%#X\n", i);  //标准16进制格式

    return 0;

}

输出结果:
2f
2F
0x2f
0X2F

 

用printf()在某种意义上来说是不安全的,因为它不做类型检查。

要输出%,只需在前面加上一个%

getchar():从输入读取一个字符。

例:

int i;                  //为对照int值EOF检测文件结束

while((i=getchar()) != EOF){/*使用i*/}

 

C风格文件操作

打开文件

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

FILE *fopen( const char * filename, const char * mode );

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

模式

描述

r

打开一个已有的文本文件,允许读取文件。

w

打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。

a

打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。

r+

打开一个文本文件,允许读写文件。

w+

打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。

a+

打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

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

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

关闭文件

为了关闭文件,请使用 fclose( ) 函数。函数的原型如下:

 int fclose( FILE *fp );

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

C 标准库提供了各种函数来按字符或者以固定长度字符串的形式读写文件。

 

写入文件

int fputc( int c, FILE *fp );

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

int fputs( const char *s, FILE *fp );

函数 fputs() 把一个以 null 结尾的字符串 s 写入到 fp 所指向的输出流中。如果写入成功,它会返回一个非负值,如果发生错误,则会返回 EOF。

 

int fprintfchar* p, const char* format ...;   //写入p[0]...

函数fprintf()来写把一个格式化字符串写入到文件中。如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF

 

读取文件

类似读取函数有:

int fgetc( FILE * fp );

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

 

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

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

如果这个函数在读取最后一个字符之前就遇到一个换行符 '\n' 或文件的末尾 EOF,则只会返回读取到的字符,包括换行符。

 

int fscanfchar* p, const char* format ...;

函数从文件中读取格式化字符串,但是在遇到第一个空格字符时,它会停止读取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
常用的五个函数(I/O) 1. 图像载入函数 函数cvLoadImage载入指定图像文件,并返回指向该文件的IplImage指针。函数支持bmp、jpg、 png、 tiff等格式的图像。其函数原型如下: IplImage* cvLoadImage( const char* filename, int iscolor); 其,filename 是待载入图像的名称,包括图像的扩展名;iscolor是一个辅助参数项,可选正数、零和负数三种值,正数表示作为三通道图像载入,零表示该图像作为单通道图像,负数表示载入图像的通道数由图像文件自身决定。 2. 窗口定义函数 函数cvNamedWindow定义一个窗口,用于显示图像。其函数原型如下: int cvNamedWindow( const char* name, unsigned long flags ); 其,name是窗口名,flags是窗口属性指标值,可以选择CV_WINDOW_AUTOSIZE和0两种值。CV_WINDOW_AUTOSIZE表示窗口尺寸与图像原始尺寸相同,0表示以固定的窗口尺寸显示图像。 函数 cvDestroyWindow(const char* name);销毁以上定义的窗口。 name是窗口名 3. 图像显示函数 函数cvShowImage是在指定的窗口显示图像,其函数原型如下: void cvShowImage( const char* name, const CvArr* image ); 其,name是窗口名称,image是图像类型指针,一般是IplImage指针。 4. 图像保存函数 函数cvSaveImage以指定的文件名保存IplImage类型的指针变量,其函数原型如下: int cvSaveImage( const char* filename, const CvArr* image ); 其,filename是图像保存路径和名称,image是IplImage指针变量。 5. 图像销毁函数 函数cvReleaseImage销毁已定义的IplImage指针变量,释放占用内存空间。其函数原型如下: void cvReleaseImage( IplImage** image ); 其,image为已定义的IplImage指针

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值