格式化输入输出函数
在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 |