Scanf()函数的使用
一、scanf()函数的工作方法
scanf("%x%x%x%x%x")中
%x称为是转换说明
输入:从键盘上得到的字符
"%x%x%x%x%x"叫格式串
当scanf()函数被调用时 scanf函数从左到右处理()中格式串
空白字符概念:空白字符(此处定义的空白字符与字符数组中的空字符’/0’不同,专门指在scanf函数中格式串中的字符类型):空格,Table,/n,换页符…
但scanf()普通字符不是空白字符,当要求读一个数时并没有输入空白字符而是输入了普通字符时,scanf()会"退回"这一个值并且异常退出,将这个普通字符放回到输入中。
1.当格式串中的转换说明要求是整数或浮点数(数字)
在寻找数的起始位置时(从键盘上输入的数的起始位置)时
因为此时scanf()处理格式串过程中要等到一个数字而不是字符,所以在这个过程中,若输入键盘输入空白字符,scanf()函数会忽略你所舒服的而空白字符而继续等待数的起始位置
注:/n问题 /n在函数的最后输入作为输入结束的标志。/n不会被当前scanf()函数读取,而将会是下一次scanf函数调用时读取的第一个字符。
scanf("%d%d%d%d",&a,&b,&c,&d);
/*
1 2
3 4
*/
//abcd储存值仍是1234而不会是1空格符空格符空格符
//scanf函数在寻找每个数的起始位置时会跳过空白字符,所以它可以成功读取这些数字
2.当格式串中的转换说明要求的是普通字符
输入数与输入字符的工作原理大致相同
但有两点不同
①当格式串要求有普通字符时,scanf()并不会跳过空白字符(如空格,回车)
即空白字符因为也是字符,会被读到scanf()格式串里面的如%c中
②若想要在格式串输入普通字符前面可以任意输入空白字符如空格符,可在如%c前加一个空白字符如 空格%c
③scanf()最后以回车符号作为结束的标志
格式串中遇到了一个或多个连续的空白字符时,scanf函数从输入中重复读空白字符直到遇到一个非空白字符(此时格式串中空白字符的数量无关紧要,只要读到了普通字符就立刻与格式串中的即将处理的下一个普通字符进行比对)(这也意味着当格式串中存在空白字符如空格,我们不一定在键盘中要输入空格符而是直接输入普通字符即可)
当遇到非空白字符时(在键盘的输入中)
scanf()函数会将其在格式串中即将进行处理的非空白字符进行比对。
当两个字符匹配,scanf()将其读入,并继续处理下一个格式串中的普通字符
当两个字符不匹配,scanf()将其"放回原位",将该字符或数字放回到输入中留给下一个scanf()函数进行读入,并异常退出函数。
如
scanf("%d%d",&a,&b);
//键盘输入1 2 此时空格符与第二个%d不匹配 函数异常退出
//空格符和2留给下一个scanf()函数来处理
二、Scanf()将输入"放回原位"原理
当用户输入的时候,程序并没有读取输入,而是把用户的输入放在一个缓冲区内,scanf()函数从这个缓冲区中读取输入。
当读入的输入与格式串中即将要处理的格式不符合时,scanf()不将缓冲区中的这个输入读取,而是将其继续留在缓冲区中。
函数异常退出。