printf,fprintf,sprintf,scanf,fscanf,sscanf区别与使用

本文介绍了C语言中的printf、fprintf和sprintf函数用于格式化输出到屏幕、文件和字符串中的用法,以及scanf、fscanf和sscanf函数用于从键盘、文件和字符串中读取格式化数据的功能。示例代码展示了如何使用这些函数进行实际操作。
摘要由CSDN通过智能技术生成

一、 printf fprintf sprintf

三个函数的头文件均是stdio.h

int printf(const char *format[,argument]...);
int fprintf(FILE *stream, const char *format[,argument]...);
int sprintf(char *buffer, const char *format[,argument]...);

fprintf只比printf多了一个FILE的指针
sprintf只比printf多了一个char
的指针

1.fprintf使用

fscanf是读文件的,那对应的fprintf当然是写文件的了,fprintf可以把数据写入文件中,借助的是第一个参数(FILE*的指针)

例如:

struct S
{
	char name[20];
	int age;
	char sex[20];
};
int main()
{
	struct S s = { "ccl", 19, "boy" };//初始化结构体作为写入文件的内容
	//打开文件
	FILE* pf = fopen("D:\\test.txt", "w");//"w"写文件
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	fprintf(pf, "%s %d %s", s.name, s.age, s.sex);//把数据写入文件
	fclose(pf);//关闭文件
	pf = NULL;//置空
	return 0;
}

注:

"w"写之前会清空文件里的内容

fprintf的作用:
官方一点:发送格式化输出到流 stream 中
简单一点:把数据写入文件(但是文件流不只是文件,c++可以定义文件流,所以只是浅谈

2.sprintf的使用

sprintf只比printf多一个char*指针,后面参数同printf。

sprintf的作用:
官方点: sprintf的作用是将一个格式化的字符串输出到一个目的字符串
参数里的buffer指针就是指向目的字符串的
简单点:把数据输出到一个字符串

int main(){
    char a[52];
    sprintf(a,"%d", 1234);

    printf("%s\n", a);

    return 0;
}

printf是将格式化输出到屏幕,fprintf和sscanf输出的去处不同而已
fprintf的去处是文件,sprintf的去处则是字符串
从这个角度就可以理解为什么fprintf的第一个参数是FILE的指针,而sprintf的第一个参数是char的指针

二、 scanf fscanf sscanf

int scanf(const char *format[,argument]...);
int fscanf(FILE *stream, const char *format[,argument]...);
int sscanf(char *buffer, const char *format[,argument]...);

1.fscanf

fscanf的作用:从文件中读入数据 赋值给变量

fscanf(stdin,...)等同于scanf(...)

stdin是标准输入流 也就是键盘 本质也是一个文件流

int main(){
    int a = 10;
    sscanf(stdin,"%d", &a);

    printf("%d\n", a);

    return 0;
}

注:避免从文件中读入中文 会出现乱码的情况
中文的编码不是单纯的ASCII码 中文有自己的编码标准
如果想要成功读取 就要改一下编码规则
这里以txt为扩展名的文件为例
把文本文件的UTF-8改为ANSI即可成功读取

2.sscanf

sscanf和scanf对比只多了一个buffer指针

官方点:从一个字符串中读入格式化的数据
简单点:从字符串中读入要的数据 (这也是为什么参数必须时字符指针的一个原因)

默认读入是从stdin中读入,在这读入来源改成了字符串而已.

 

sscanf可以实现切割字符串等常见的字符串操作
fscanf可以让我们从文件中拿到想要的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值