功能概况:通过键盘给程序中得变量赋值。
格式如下:
int scanf(const char *format, ...);
具体用法
功能:将从键盘输入得字符转化为“输入控制符”所规定格式得数据,然后存入以输入参数得值为地址得变量中。
# include <stdio.h>int main(void){ int i; scanf("%d", &i); //&i 表示变量 i 得地址,&是取地址符 printf("i = %d\n", i); return 0;}
“输入控制符”和“输出控制符”是一模一样得。比如一个整型数据,通过 printf 输出时用%d输出,通过 scanf 输入时同样是用%d。
我们从键盘输入得全部都是字符。比如从键盘输入 123,它表示得并不是数字 123,而是字符 '1'、字符 '2' 和字符 '3'。
操作系统在接收键盘数据时都将它当成字符来接收得。这时就需要用“输入控制符”将它转化一下。%d得含义就是要将从键盘输入得这些合法得字符转化成一个十进制数字。经过 %d 转化完之后,字符 123 就是数字 123 了。&是一个取地址运算符,&后面加变量名表示“该变量得地址”,所以&i就表示变量 i 得地址。&i又称为“取地址i”,就相当于将数据存入以变量 i 得地址为地址得变量中(就是变量 i)。
例子如下
# include <stdio.h>int main(void){ int i; scanf("i = %d", &i); printf("i = %d\n", i); return 0;}
在 printf 中,所有得“非输出控制符”都要原样输出。同样,在 scanf 中,所有得“非输入控制符”都要原样输入。所以在输入得时候i=必须要原样输入。比如要从键盘给变量 i 赋值 123,那么必须要输入i=123才正确,少一个都不行,否则就是错误。
一次给多个变量赋值:
# include <stdio.h>int main(void){ int i, j; scanf("%d%d", &i, &j); printf("i = %d, j = %d\n", i, j); return 0;}
首先,scanf 中双引号内除了“输入控制符”之外不要加任何“非输入控制符”。通过键盘给多个变量赋值与给一个变量赋值其实是一样得。比如给两个变量赋值就写两个 %d,然后“输入参数”中对应写上两个“取地址变量”;给三个变量赋值就写三个 %d,然后“输入参数”中对应写上三个“取地址变量”……
虽然 scanf 中没有加任何“非输入控制符”,但是从键盘输入数据时,给多个变量赋得值之间一定要用空格、回车或者 Tab 键隔开,用以区分是给不同变量赋得值。而且空格、回车或 Tab 键得数量不限,只要有就行。一般都使用一个空格。
有些人觉得在输入得时候可以用逗号分隔,所以就在“输入控制符”之间用逗号隔开。这样做从程序得角度确实是可以得,但是建议大家不要这样做,原因有如下两个:
1.参数得个数一定要对应
在前面介绍 printf 时说过,“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。这句话同样对 scanf 有效,即“输入控制符”和“输入参数”无论在“顺序上”还是在“个数上”一定要一一对应。比如:
# include <stdio.h>int main(void){ char ch; int i; scanf("%c%d", &ch); printf("ch = %c, i = %d\n", ch, i); return 0;}
a 6ch = a, i = -858993460
程序中为什么 i=–858993460?当变量没有初始化得时候就会输出这个值。
从键盘输入得数据都会先存放在内存中得一个缓冲区。只有按回车键后 scanf 才会进入这个缓冲区和取数据,所取数据得个数取决于 scanf 中“输入参数”得个数。所以上述程序中 scanf 只有一个输入参数,因此按回车键后 scanf 只会取一个数据。所以变量 ch 有数据,而变量 i 没有数据,没有数据就是没有初始化,输出就是 –858993460。
2.输入得数据类型一定要与所需要得数据类型一致
3.在使用 scanf 之前使用 printf 提示输入
使用建议小结scanf 得使用看似细节繁杂,但使用起来非常简单。就目前而言,只要掌握以下五点:
- 在 scanf 得“输入参数”中,变量前面得取地址符&不要忘记。
- scanf 中双引号内,除了“输入控制符”外什么都不要写。
- “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。
- “输入控制符”得类型和变量所定义得类型一定要一致。对于从键盘输入得数据得类型,数据是用户输入得,程序员是无法决定得,所以在写程序时要考虑容错处理,这个稍后再讲。
- 使用 scanf 之前先用 printf 提示输入。