C语言程序设计——输入输出函数(二)

补充

在上一篇文中简单介绍了输入输出函数printf和scanf,其中它还有一些家族函数,在这里再浅浅补充一下。如下代码框所示

sprintf()
fprintf()
sscanf()
fscanf()

可以看到与我们常使用的函数中只是再前面加了f 或 s,我们在creference上查看也会发现他们的功能是相同的。
s代表的是string,所以sprintf()和sscanf()这一组输入输出函数代表的是字符数组的输入输出
f代表的是file,所以fprintf()和fscanf()这一组输入输出函数代表的是文件的输入输出

字符数组的输入输出

先用代码来演示一下使用情况

#include
int main(){
	
	char temp[100];
	char res[100];    //创建两个字符数组
	sprintf(temp, "asdasd\n");  // 向temp字符数组中打印一段字符串
	printf("%s", temp); 		// 输出temp字符数组内容
	sscanf(temp,"%s", res);		// 在temp字符数组中提取字符串,输入到res中
	printf("%s", res);			// 打印res字符数组内容
}

====================================================
>> asdad
asdasd

可以看到该组函数的输入输出函数主要是针对字符串进行操作的,而且对于函数使用上,只是多加了一个字符串地址的参数,其他均与printf()和scanf()函数情况一致。那么只针对字符串进行操作,我们不难想出他们的作用就是主要针对于字符串的分割与拼接。那么我们在以IP地址为例,再深入了解一下该组函数对于文本的拼接与切割。
C语言程序设计——输入输出函数(二)_第1张图片

文件的输入输出

在这里需要使用c语言来操作文件读写,那么关于如何操作等,不进行过多的赘述,只针对于输入输出函数讲解

#include
int main(){
	
	FILE *fp = fopen("./output.txt", "w");  // 打开文件
	fprintf(fp, "this is a test");			// 向文件打印字符串
	fclose(fp);								// 关闭文件
	}

C语言程序设计——输入输出函数(二)_第2张图片
C语言程序设计——输入输出函数(二)_第3张图片
可以看到,我们对于文件的输入输出已经完成了,但是在向文件提取文本的时候出现了问题,我们提取的内容只有一个this。这个问题我们在上一篇文章中已经接触到了,在使用%s时,系统会把空格和换行符作为终止符。在我们输入的文本中是有空格存在的,所以在fscanf()读到空格的时候就会结束读取,导致我们的结果残缺。要解决的话,也很简单,就是用我们接触过的字符匹配集。C语言程序设计——输入输出函数(二)_第4张图片

新的问题

正如上面所说我们使用字符匹配集可以解决空格的问题,那么如果我们想要读入多行的,本身就带有换行符,我们可以很容易想到使用循环读入。如果使用循环读入的话,那么就要使用二维的字符数组来接收才可,同样要记得使用一个getchar()来吸收缓冲区里的换行符,否则会陷入死循环,但是在这里需要强调的是,文件流中会有稍稍的不一样,需要把getchar换成fgetc()。其它内容完全一样可以参考上一篇的循环读入。
除此之外是不是有另一种方法呢。我们需要使用循环读入逐行读入,然后还要注意规避缓冲区里的换行符。那么换一种思路,%c它是不区分任何字符的,那么用%c进行逐字读入不就可以不用再注意死循环的问题,而且使用一维数组即可。
C语言程序设计——输入输出函数(二)_第5张图片

你可能感兴趣的:(c语言,开发语言)