格式化输入输出函数

格式化输入输出函数

在C语言中格式化输入函数主要就是scanf(或scanf_s),格式化输出函数是printf函数。

格式化输入输出函数,能够对各种类型的数据混合地输入输出,主要是依靠一个格式控制字符串来实现的。

1、scanf/或sscanf函数和scanf_s或sscanf_s函数

---------------------------scanf函数或scanf_s函数----------------------------

scanf函数是从标准输入流中读取用户输入的一段或多段文字,并将每段文字转换到控制符对应的各种类型的变量中去。

函数格式:int scanf( const char *format, ... );
#define _CRT_SECURE_NO_WANINGS
#include <stdio.h>
int main() {
	char s[80]="";
	printf("请输入您的名字:");   //stdout 标准输出
	scanf_s("%s", &s,sizeof(s));//stdin 标准输入
	puts("输入的名字为:");
	puts(s);	//将整个字符串输出
	return 0;
}

---------------------------sscanf函数或sscanf_s函数-------------------------

sscanf读取格式化的字符串中的数据。

swscanf 是 sscanf 的宽字符版本;swscanf 的参数是宽字符串。 swscanf不处理 Unicode 全角十六进制或"兼容性区"字符。 除此以外,swscanf 和 sscanf 的行为完全相同。

函数语法:

int sscanf(const char *buffer,const char *format, [argument] ... ); 

参数:

buffer  存储的数据

format  窗体控件字符串。 有关详细信息,请参阅"格式规范"。

argument  可选自变量

locale  要使用的区域设置

sscanf与 scanf类似,都是用于输入的,只是后者以键盘stdin为输入源,前者以固定字符串为输入源。

1、一般用法

char buf[512] = ;
sscanf("123456 ", "%s", buf);
printf("%s\n", buf);

2、取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。

sscanf("123456 ", "%4s", buf);
printf("%s\n", buf);

3、 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。

sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s\n", buf);

4、取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。

sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);
printf("%s\n", buf);

5、取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。

sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);
printf("%s\n", buf);

6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非’@'的一串内容送到buf中

sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);
printf("%s\n", buf);

7、给定一个字符串**“hello, world”,仅保留"world"**。(注意:“,”之后有一空格)

sscanf("hello, world", "%*s%s", buf);
printf("%s\n", buf);

整合代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h> 
int main()noexcept{
	char str[100] = { 0 };
	int arr[4] = {0};
sprintf(str,"%d.%d.%d.%d",192,168,0,1);
printf("str=%s\n",str);
sscanf_s(str,"%d.%d.%d.%d",&arr[0],&arr[1],&arr[2],&arr[3]);
for (int i = 0; i < 4;i++) {
		printf("%d\n",arr[i]);
}
	return 0;
}

2、scanf 或 scanf_s函数的间隔符

在scanf或scanf_s函数的控制字符串内,除了控制符(%号加一个字母)之外,其余的文字都需要看作是间隔符。

两段控制符之间用空格间隔,用户输入数据时就必须用空格间隔;如果两段控制符之间用逗号,用户输入时就必须用逗号间隔;如果两段控制符之间没有间隔符,我们输入时还是要用空格做间隔符。

#define _CRT_SECURE_NO_WANINGS
#include <stdio.h>
int main(){
	int x = 0, y = 0;
	printf("请输入两个数字:");
	scanf_s("x=%d,y=%d", &x, &y);
	printf("你输入的是:x = % d, y = % d\n", x, y);
	return 0;
}

在scanf的控制的字符串内,不止是空格和逗号等才能作为间隔符。控制串内控制符以外其他所有文字,包括控制符前面的文字也都应该算作是间隔符。在我们输入数据时,必须把这些间隔符一起按格式要求输入。如果输入的内容缺少这些间隔符,不符合控制串内的格式要求的话,输入的数据无效。

3、printf函数和sprintf函数

------------------------------printf函数----------------------------------------

printf函数不仅可以输出一行或多行文字,而且还可以混合输出各种类型的数据。

函数格式:int printf( const char *format, … );

#define _CRT_SECURE_NO_WANINGS
#include <stdio.h>
int main(){
	int x = 0, y = 0;
	printf("请输入两个数字:");
	scanf_s("x=%d,y=%d", &x, &y);
	printf("你输入的是:x = % d, y = % d\n", x, y);
	return 0;
}

------------------------------sprintf函数----------------------------------------

在c语言中sprintf()函数的用法如下:

  • 1、该函数包含在stdio.h的头文件中。

  • 2、sprintf和平时我们常用的printf函数的功能很相似。sprintf函数打印到字符串中(要注意字符串的长度要足够容纳打印的内容,否则会出现内存溢出),而printf函数打印输出到屏幕上。sprintf函数在完成其他数据类型转换成字符串类型的操作中应用广泛。

参数列表

  • string—— 这是指向一个字符数组的指针,该数组存储了 C 字符串。

  • format—— 这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h> 
int main()noexcept{
	char str[100] = { 0 };
	int arr[4] = {0};
sprintf(str,"%d.%d.%d.%d",192,168,0,1);
printf("str=%s\n",str);
	sscanf_s(str,"%d.%d.%d.%d",&arr[0],&arr[1],&arr[2],&arr[3]);
	for (int i = 0; i < 4;i++) {
		printf("%d\n",arr[i]);
	}
	return 0;
}

=随堂练习题:=

题目要求:

1.使用printf函数,求解一个数字n的十进制表示的数字位数

2.使用printf函数,实现循环输入并求解一个数字n的十进制表示的数字位数

  • 使用printf函数,求解一个数字n的十进制表示的数字位数
#include<stdio.h>
int main() noexcept {
	int n;
	scanf_s("%d",&n);
	printf("has %d digits! %d\n",printf("%d",n),2);
	return 0;
}
  • 使用printf函数,实现循环输入并求解一个数字n的十进制表示的数字位数
#include<stdio.h>
int main() noexcept {
	printf("请循环输入整数,如想退出输入请输入000!");
	int n;
	while (scanf_s("%d", &n) != EOF){
	if (n == 000)break; 
	printf("has %d digits! %d\n",printf("%d",n),2);
}
	return 0;
}

4、C语言控制符常用

格式printf函数scanf函数
单字符%c (等价于putchar)%c (等价于getchar)
字符串%s (类似于puts)%s (类似于gets)
有符号的十进制整数%d%d
无符号的十进制整数%u%u
有符号的64位十进制整数%lld%lld
无符号的64位十进制整数%llu%llu
单精度浮点数 (十进制记数法)%f%f
单精度浮点数(紧凑小数输出)%g%g
双精度浮点数 (十进制记数法)%lf%lf
无符号的十六进制整数(使用“ABCDEF”)%x%x
无符号的八进制整数%o%o
变量地址%p

5、printf函数的占位控制

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值