十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
scanf 函数最主要的用法是:
成都创新互联公司是一家集网站建设,城口企业网站建设,城口品牌网站建设,网站定制,城口网站建设报价,网络营销,网络优化,城口网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
scanf("输入控制符", 输入参数);
函数原型:int scanf(const char * restrict format,...);
函数 scanf() 是从标准输入流stdin (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
扩展资料:
函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
发展:
使用scanf函数进行输入,必须指定输入的数据的类型和格式,不仅繁琐复杂,而且很容易出错。C++保留scanf只是为了和C兼容。
以便过去用C语言写的程序可以在C++的环境下运行。C++的编程人员都愿意使用cin进行输入,很少使用scanf。
但是scanf有一个明显的优点,速度比cin函数快。
参考资料:
百度百科-scanf (计算机语言函数)
int
__cdecl
scanf
(
const
char
*format,
...
){
va_list
arglist;
va_start(arglist,
format);
return
vscanf(_input_l,
format,
NULL,
arglist);}int
__cdecl
vscanf
(
INPUTFN
inputfn,
const
char
*format,
_locale_t
plocinfo,
va_list
arglist
)/*
*
stdin
'SCAN',
'F'ormatted
*/{
int
retval;
_VALIDATE_RETURN(
(format
!=
NULL),
EINVAL,
EOF);
_lock_str2(0,
stdin);
__try
{
retval
=
(inputfn(stdin,
format,
plocinfo,
arglist));
}
__finally
{
_unlock_str2(0,
stdin);
}
return(retval);}int
__cdecl
_input_l(_Inout_
FILE
*
_File,
_In_z_
__format_string
const
unsigned
char
*,
_In_opt_
_locale_t
_Locale,
va_list
_ArgList);由上面代码可知scanf
只不过是一张皮,scanf
一个族系的函数都是通过实际调用
vscanf
来实现功能的,而vscanf
又是通过调用
_input_l
函数来实现功能的。
我们知道windows
的IO
是通过文件技术实现的,不管是输入设备还是输出设备,操作系统都将它抽象成一个文件,通过对文件的读写实现对数据的输入和输出。
通过查询stdin的定义:
#define
stdin
(__iob_func()[0])
_CRTIMP
FILE
*
__cdecl
__iob_func(void);
我们可以知道,_input_l
函数正是将键盘输入写入了stdin
创建一个临时的交换文件的缓冲区的。
说道读取文件,你上面的问题就好揭示了。
第一、"1000
50
^z"
是一个整体,是一个有效的字符串,其本身并不含有文件结尾的含义。因为你不能说“这个人不讲礼貌,分手了也不说再见”,这句话和“再见”
这个词的含义是一样的。
第二、单独的^Z
可被认作文件的结尾也就是你判断条件中的EOF。
因此,单独输入^Z
是可以结束循环的。
#includestdio.h
int main()
{ int a,b,c;
scanf("%d%d%d",a,b,c);
printf("a=%d b=%d c=%d\n",a,b,c);
return 0;
}