Scanf函数基本概念
1.scanf函数介绍
- scanf函数是一个阻塞式函数
- 程序会停在scanf函数出现的地方, 直到接收到数据才会执行后面的代码
- scanf函数原型包含在标准输入输出头文件“stdio.h”中,用于接收键盘输入的内容。
- 格式:scanf(“格式控制字符串”,输入项地址列表);
- 例如: scanf(“%d”, &num);
- 格式控制字符串:
- 规定数据输入的格式,由格式控制符和普通字符组成,格式控制符和百分号(%)一起使用,
用来说明输入数据的数据类型(格式字符)。
” + 输入项地址列表:
” * 需要接收数据的变量地址,这些输入项与格式控制字符串在类型和数量上要对应,当有多个 输入项时,各个地址名之间以逗号“,”分隔。输入格式和变量类型要保持一致。
- 规定数据输入的格式,由格式控制符和普通字符组成,格式控制符和百分号(%)一起使用,
(img)
在C语言中,一个变量的地址可以通过地址运算符&得到。例如:定义int a,b;则a,b的 地址为&a,&b
2.scanf函数格式控制符
格式 | 意义 |
---|---|
d | 输入一个十进制整数 |
o | 输入一个八进制整数 |
x | 输入一个十六进制整数 |
i | 输入一个有符号或无符号的十进制、八进制、十六进制整数 |
u | 输入一个无符号十进制整数 |
f 、e或E、 g或G | 输入一个小数形式或指数形式的浮点数 |
c | 输入一个字符 |
s | 输入一个字符串 |
- 获取整形数据
~~
~~ // 1.定义变量用于接收输入数据
~~ int num = 0;
~~ // 2.利用scanf函数接收用户输入数据
~~ scanf("%d", &num);
~~ // 3.打印验证结果
~~ printf("num = %d", num);
~~
- 获取实数型数据
~~
~~ // 1.定义变量用于接收输入数据
~~ float num = 0;
~~ // 2.利用scanf函数接收用户输入数据
~~ scanf("%f", &num);
~~ // 3.打印验证结果
~~ printf("num = %d", num);
~~
- 分隔符
- 除”空格”,”回车”,”tab”之外, 如果输入的数据和scanf接收的数据不匹配将会自动结束接收
- 如果scanf中没有分隔符则可以使用回车 空格 tab作为分隔符
- 格式化字符串中如果有%c的时候,%c会接收任意的字符 所以上述的情况会受到影响
(技巧:无论想接收什么类型的数据,只要有需要一次性接收多个,就给每一个数据之间加上固定的符号作为分隔符) - 回车是scanf的结束符,不能在scanf的格式化字符串末尾写上\n,如果想结束程序,就输入一个不匹配的类型
- scanf函数中,只要不是%c,空格会被忽略。
/*int number;
scanf("%i",&number);
printf("%i",number);*/
//todo 从控制台接收用户输入的两个整数,计算整数和
/*printf("请输入一个数字\n");
int a;
scanf("%i",&a);
printf("请输入另一个数字\n");
int b;
scanf("%i",&b);
int sum = a+b;
printf("计算结果为%i\n",sum);*/
/* int num1,num2;
printf("请输入两个数\n");
scanf("%i,%i",&num1,&num2);
printf("运算结果%i",num1+num2);*/
printf("请输入:\n");
int number;
int number2;
char value;
scanf("%i\n%i\n%c\nreturn",&number,&number2,&value);
printf("number = %i,number2 = %i,char = %c",number,number2,value);
Scanf函数实现原理
本小节知识点:
1. scanf的运行原理
1.scanf的运行原理
- 系统会将用户输入的内容了放入输入缓冲区
- scanf方式会从输入缓冲区中逐个取出内容赋值给格式符, 如果类型不一致不会修改原有数据