浅谈C的scanf

来源:互联网 发布:手机可以禁止安装软件 编辑:程序博客网 时间:2024/06/10 06:00

scanf()函数是格式化输入函数,它从标准输入设备(键盘)读取输入的信息。

其调用格式为:

      scanf("<格式化字符串>", <地址表>);

    格式化字符串包括以下三类不同的字符;

    1. 格式化说明符:  其中格式化字符串包括两部分内容:一部分是正常字符,  输入时这些字符将按原样的输入,另一部分是格式化规定字符,"%"开始,后跟一个或几个规定字符,

用来确定输入内容格式。

    2. 空白字符:空白字符会使scanf()函数在读操作中略去输入中的一个或多

个空白字符。

    3. 非空白字符:一个非空白字符会使scanf()函数在读入时剔除掉与这个非

空白字符相同的字符。

    注意:(1)地址表是需要读入的所有变量的地址,而不是变量本身:

             ----如果是一般的变量,通常要在变量名前加上"&";但输出时是用变量名

             ----如果是数组,用数组名就代表了该数组的首地址;输出时也是用数组名

             ----如果是指针,直接用指针名本身,不要加上“*”;输出时也用该指针即可。

这些都是一些基本的语法的规则,在正真用的时候输入单一的数据还好,一旦交叉输入,或者其他的情况就有各种问题,这主要的对于scanf的内部不怎么了解。

   其实数据从缓冲区到输入列表的过程。

例子:

#include<stdio.h>

int main ()

{

   Int num;

   Int ch;

   scanf( “%d”,&num);

   Scanf(“%c”,&ch);

    return 0;

}

 

在你输入一个整数以后,不再让你输入;这主要的原因是

因为在你按回车键之前  所输的数字都处于一个叫做缓冲区的位置里

 

回车键是特殊的  它先将字符'\n'添加到缓冲区 随后便清除缓冲区  将其中的所有字符发送到一个叫做输入列表的地方 ,scanf函数以及其他标准输入函数便会立刻从输入列表中获取内容,ch = ‘\n’;

 

格式说明符对于scanf是十分重要的   它便是“规则” 告诉scanf如何从输入列表中获取字符 并且如何做转换

   时刻记住输入列表中的内容全是字符  规律就会十分容易

    还有需要注意的是  尽管输入列表中的内容都是字符  但是字符还有分类  比如空白符  数字字符  字母字符等

 

 

 例如

     常见的%d 忽略前置空白符  获取连续数字字符 直到遇上非数字字符或者输入列表尾为止,但是如果忽略到空白符之后遇到的时非数字字符 那么就直接结束。

     %c 直接获取一个字符到目标变量 “看见什么吃什么”。

又由于所有的变量都共享一个输入列表,所以很容易在上一个整数输完后列表里面由于有一个‘\n’所以下一个字符输入,直接的读取了。

   为了防止这种情况的出现,所以在输入整型后加一段代码;

While(getchar()!=’\n’ )

{

   continue;

}

0 0