C语言的scanf函数

scanf函数

  • 简介
  1. scanf是 Scan Format 的缩写,意思是格式化扫描,也就是从键盘获得用户输入。
  2. scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
  3. scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include <stdio.h>。)
  • 函数原型

int scanf(const char * restrict format,…);

  • 一般形式
    scanf函数的一般形式为:

scanf(“格式字符串”, 地址表列);

格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
地址表列中给出各变量的地址(由地址运算符“&”后跟变量名组成)。
例:
要输入一个整型变量 a (int型)的值。

#include<stdio.h>
int mian(){
	int a;
	scanf("%d",&a);
	prinntf("%d",a);
	return 0;
}

此时我们编译运行后从键盘敲入一个值(int型范围内),再按回车键即将这个值输入给了变量 a 。

格式字符串

格式字符串的一般形式为:

%(*)(域宽)(长度修饰符)格式说明符

括号内的都不是必要元素,皆可省略。

  1. 常用的格式说明符
%d //输入十进制整数
%o //输入八进制整数
%x //输入十六进制整数
%u //输入无符号十进制整数
%f //输入实型数(用小数形式或指数形式)
%e //同上
%c //读入单个字符
%s //输入字符串

ps:输入类型与格式必须一一对应,否则会造成warming或error。

  1. (*)

表示读入的数据将被舍弃。带有*的格式指令不对应可变参数列表中的任何数据。
例:

scanf("%d %*d %d",&a,&b);

当输入为:1 2 3时,1赋给 a ,2舍弃,3赋给 b 。

拓展:" "内除了格式字符串以外的都要原封不动地输入才能让计算机有效地读取所需要的数据并将其赋给对应的变量。

例:(如未说明,以下所有数据都默认为int型)

scanf("%d",&a);      //对应输入为:1
scanf("a=%d",&a);    //对应输入为:a=1
scanf("%d %d",&a,&b);//对应输入为:1 2(中间有几个空格就敲几个空格)
scanf("%d,%d",&a,&b);//对应输入为:1,2(注意区分中英文符号);1
scanf("%d%d",&a,&b); //对应输入为:1 2(中间对应空格键,回车键或TAB键)
  1. 域宽
    一个非零的十进制整数形式出现,表示该格式指令最多读入的字符数。

例:

scanf("%5d",&a);//当输入为:1234567时,将12345赋给a,其余舍弃。
scanf("%3d%3d",&a,&b);//当输入为:1234567时,将123赋给a,456赋给b。

ps:scanf函数中没有精度控制,
如:scanf("%5.2f",&a);是非法的(此处a为float型)。
不能企图用此语句输入小数为2位的实数。

  1. 长度修饰符号
    常用的两个长度格式符为l和h(其中l最为常用)。
    l表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。
    h表示输入短整型数据。

未完待续。。。


版权声明:本文为m0_51604204原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。