输入/输出函数知识总结。

今天我们来学习C语言最后的基本知识,关于输入输出的问题。

一。错误报告函数:perror。

它以一种简单、统一的方式报告错误。例如:

#include<stdio.h>
#include<Windows.h>
int main()
{
	FILE * pFile;         
	pFile=fopen("unexit.ent","rb");
	if(pFile==NULL)
	{
		perror("The following error occurred");
	}
	else
	{
		fclose(pFile);
	}
	system("pause");
	return 0;
}

这就是perror的用法。注:如果perror函数的参数str指针不是NULL,并指向一个非空的字符串,perror函数先打印这个字符串,然后跟着输出一个分号和一个空格,接着输出错误提示信息。

二。终止执行:exit.

这个函数定义在stdlib.h中。例如:void exit(int status);

参数status返回给了操作系统,用于提示程序是否完成。C语言定义了预定义符号:EXIT_SUCCESS和EXIT_FAILURE来表示成功或者失败返回。举例:

#include<stdio.h>
#include<Windows.h>
int main()
{
	FILE * pFile;
	pFile=fopen("myfile.txt","r");
	if(pFile==NULL)
	{
		printf("Error opening file");
		exit(EXIT_FAILURE);
	}
	else
	{
	}
	system("pause");
	return 0;
}

这个程序会直接退出。


三。流。

首先,程序运行之后默认打开三个流:(1)标准输入(2)标准输出(3)标准错误。

标准输入为键盘设备,标准输出为终端或屏幕。

在stdio.h中定义了很多I/O常量。(1)EOF-文件结束标志,表示文件到了结尾。(2)FOPEN-MAX-一个程序最多打开文件数。(3)FILENAME_MAX-文件名的最大长度。

四。IO函数总览。有三种方式:单个字符,文本行,二进制数据。

(1)字符输入函数:getchar,标准输入流。

(2)字符输出函数:putchar,标准输出流。

(3)字符输入函数:fgetc,getc,所有输入流。

(4)字符输出函数:fputc,putc,所有输出流。

(5)文本行输入函数:fgets,gets,所有输入流。

(6)问本行输出函数:fputs,puts,所有输出流。

(7)格式化输入函数:scanf,标准输入流。

(8)格式化输出函数:printf,标准输出流。

(9)格式化输入函数:fscanf,所有输入流。

(10)格式化输出函数: fprintf,所有输出流。

(11)二进制输入:fread,文件

(12)二进制输出:fwrite,文件。

五。字符I/O:getchar putchar

#include<stdio.h>
#include<Windows.h>
int main()
{
	int c;
	puts("Enter text. Include a dot ('.') in a sentence to exit:");
	do{
		c=getchar();
		putchar(c);
	}while(c!='.');
	system("pause");
	return 0;
}

结果是打什么显示什么。

getc和putc函数:

#include<stdio.h>
#include<Windows.h>
int main()
{
	FILE * pFile;
	int c;
	int n=0;
	pFile=fopen("myfile.txt","r");
	if(pFile==NULL)
	{
		perror("Error opening file");
	}
	else{
		do{
			c=getc(pFile);
			if(c=='$')
			{
				n++;
			}
		}while(c!=EOF);
		fclose(pFile);
		printf("File contains %d$.\n",n);
	}
	system("pause");
	return 0;
}

fgetc和fputc:

getc和fgetc功能一样,putc和fputc功能也一样。

六。未格式化的行I/O。

gets和puts函数:

#include<stdio.h>
#include<Windows.h>
int main()
{
	char string[256];
	printf("Insert your full address:");
	gets(string);
	printf("Your address is: %s\n",string);
	system("pause");
	return 0;
}


#include<stdio.h>
#include<Windows.h>
int main()
{
	char string[]="Hello world";
	puts(string);
	system("pause");
	return 0;
}


fgets和fputs函数:

#include<stdio.h>
#include<Windows.h>
int main ()
{
	FILE * pFile;
	char mystring [100];
	pFile=fopen("myfile.txt","r");
	if(pFile==NULL)
	{
		perror("Error opening file");
	}
	else{
		if(fgets(mystring,100,pFile)!=NULL)
		{
			puts(mystring);
		}
		fclose(pFile);
	}
	system("pause");
	return 0;
}


七。格式化的行I/O

scanf和printf:这就不说了,想必大家都很了解了。

唯一要注意的的就是各种格式,比如:scanf中:%79s表示只读取79个。printf中:%10d表示预留10个位置。%010d表示预留的位置都赋值为0.  %#x表示要带上进制标识符。%-10d表示向左对齐,%-010d表示左对齐,不能添0.  %4.2f表示预留4个位置,保留小数后2位。%*d表示预留5个位置。

fscanf和fprintf函数:

#include<stdio.h>
#include<Windows.h>
int main()
{
	char str[80];
	float a;
	FILE * pFile;
	pFile=fopen("myfile.txt","w+");
	fprintf(pFile,"%f %s",3.1416,"PI");
	rewind(pFile);
	fscanf(pFile,"%f",&a);
	fscanf(pFile,"%s",&str);
	fclose(pFile);
	printf("I have read: %f and %s \n",a,str);
	system("pause");
	return 0;
}


八。二进制I/O

fread和fwrite函数:

#include<stdio.h>
#include<Windows.h>
int main()           
{
	FILE * pFile;
	long LSize;
	char * buffer;
	size_t result;
	pFile=fopen("myfile.bin","rb");
	if(pFile==NULL)
	{
		fputs("File error",stderr);
		exit(1);
	}
	fseek(pFile,0,SEEK_END);
	LSize=ftell (pFile);
	rewind(pFile);
	buffer=(char*)malloc(sizeof(char)*LSize);
	if(buffer==NULL)
	{
		fputs("Memory error",stderr);
		exit(2);
	}
	result=fread(buffer,1,LSize,pFile);
	if(result!=LSize)
	{
		fputs("Reading error",stderr);
		exit(3);
	}fclose(pFile);
	free(buffer);
	system("pause");
	return 0;
}

这个程序告诉我们如何来求文件的大小,因为二进制有可能是-1,所以不能用EOF来判断,所以得用其他函数来求大小。正如这个程序,首先fseek函数将文件从头到尾赋值0,再用ftell函数移到当前写入位置也就是文件的最后一位,这样就获取了文件的大小。

以上就是我们I/O函数的内容了,希望大家多多练习,熟练掌握这些知识。

猜你喜欢

转载自blog.csdn.net/ymk1507050118/article/details/80598728