格式化输⼊输出函数
格式化输⼊输出函数
在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);//将整个字符串输出
return0;
}
---------------------------sscanf函数或sscanf_s函数-------------------------
sscanf读取格式化的字符串中的数据。
是 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]);
}
return0;
}
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);
return0;
}
在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);
return0;
}
------------------------------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]);
}
return0;
}
=随堂练习题:=
题⽬要求:
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);
return0;
}
使⽤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);
}
return0;
}
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函数的占位控制

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。