C语言格式输入函数

C语言格式输入函数scanf()函数是格式控制输入函数,scanf()函数使用的一般格式为:

        scanf("格式控制字符",输入项列表);

scanf()函数有“格式控制字符”,“输入项列表”两个参数,scanf()函数的功能是按照“格式控制字符”中规定的输入格式,从键盘上读取若干个数据,按“输入项列表”中变量从左向右的顺序,依次存入对应的变量中。

scanf()函数的格式控制字符基本上与printf()函数的格式控制相似,都是以 % 开始,以一个格式字符结束,格式控制的功能是规定输入数据的格式。
关于scanf()函数,做如下几点说明:

  • 在scanf()函数中一个格式说明要求输入一个数据,就必须在地址列表中有一个变量的地址与之对应,并且类型要一致。例如:
    scanf("%d%f",&a,&b);
    

    其中,“%d”与&a对应,变量a的类型为整型,“%f”与&b对应,变量b的类型为浮点型。

  • scanf()函数的输入项必须是一个“地址”,它可以是一个变量的地址,也可以是数组的首地址,但不能是变量名。
    “&”是取地址符号,变量的地址必须写成“&变量名”。例如:

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

    &a&b分别表示变量a、b存储单元的地址。

  • scanf()函数格式说明符与printf()函数相似,格式说明符与输入项列表一一对应。常用到的格式说明符有以下几种。

    • D:输入有符号的十进制整数;
    • o:输入无符号的八进制整数;
    • u:输入无符号的十进制整数;
    • x或X:输入无符号的十六进制整数;
    • c:输入单个字符;
    • s:输入字符串;
    • f:输入单精度或双精度数。
      在使用scanf()函数时,普通字符和转义字符可不出现。
  • 格式说明符中有普通字符或转义字符时,数据输入时,必须按它们的原样输入。例如:
            int a,b;
            scanf("%d,%d",&a,&b);
    

    在输入数据时,两个数据之间必须用“,”开隔。如:

            4,6↙
    

    才是正确的输入方式,表示将整数4存放在变量a所代表的存储空间内,将整数6存放在变量b所代表的存储空间内。又如:

            int a,b;
            scanf("a=%d,b=%d",&a,&b);
    

    正确的数据输入格式为:a=4,b=6↙

  • “格式控制字符”中如果没有任何普通字符,输入数据时,各个数据之间可以用空格、跳格键(Tab)或回车键作为间隔符。例如:

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

    可以有三种输入方式:

    1. 数据中间使用一个或多个空格
            10 20↙
            10   20↙
    
    1. 数据中间按下跳格键(Tab)
            10[Tab]20↙
    
    1. 数据中间按下回车键,即分行输入
            10↙
            20↙
    

    另外,上面几种方式可以混合使用。例如:

         int a,b,c,d;
         scanf("%d%d%d%d",&a,&b,&c,&d);
    

    输入时:

            10 20↙
            30[Tab]40↙
    
  • 可以指定输入数据所占的列数,系统自动按指定的列数截取所需的数据。
    示例:

    #include <stdio.h>
    void main() /* 主函数*/
    {
        int a, b;                   /*定义变量*/
        scanf("%2d%3d", &a, &b);    /*输入*/
        printf("a=%d,b=%d ", a, b); /*输出*/
    }
    

    运行结果:

            123456↙
            a=12,b=345
    
  • 输入数据时不能规定精度。例如:
            scanf("%5.2f",&x);
    

    这种输入格式是错误的。

  • scanf()函数在进行输入的时候是没有提示的。例如:

            scanf("a=%d",&a);
    

    在运行时,不会像printf()函数那样将“a=”原样显示。运行时应输入:a=10↙

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

    应输入:10,3↙
    若需要提示时,可以用printf()函数输出字符串进行提示。

    示例:

    #include <stdio.h>
    void main()
    {
        int x, y, max;                /*定义所需变量*/
        printf("请输入两个整数:\n"); /*输出提示文字*/
        scanf("%d,%d", &x, &y);       /*输入x和y的值*/
        if (x > y)                    /*判断x和y的值*/
        {
            max = x;
        }
        else
        {
            max = y;
        }
        printf("两个数中较大的数为:%d\n", max); /*将比较后的结果输出*/
    }
    

    运行结果:

            请输入两个整数:
            4,10↙
            两个数中较大的数为:10
    
  • 如果输入的数据多于scanf()函数所要求的个数,余下的数据可以被下一个scanf()函数接着使用。
    示例:

    #include <stdio.h>
    void main()
    {
        int a, b, c;                       /*定义所需变量*/
        scanf("%d%d", &a, &b);             /*首先输入a和b的值*/
        scanf("%d", &c);                   /*然后输入c的值*/
        printf("a=%d,b=%d,c=%d", a, b, c); /*将三者的数值输出*/
    }
    

    运行结果:

            12 34 56 78↙
            a=12,b=34,c=56
    

    在上面的程序中出现两个scanf()输入函数,第一个scanf()只读入了前两个数据12和34,剩下的56将被下一个scanf()函数所用。

  • 在scanf()函数中某格式字符读入数据时,遇以下情况时认为该数据结束:

    • 遇“数据分隔符”,如空格、回车、tab或指定字符。
    • 遇宽度结束,如“%3d”,只取3列后读取结束。
    • 遇非法输入。

    示例:

    #include <stdio.h>
    void main()
    {
        int a, b;
        scanf("%d%d", &a, &b);
        printf("a=%d,b=%d", a, b);
    }
    

    运行结果为:

            123.45  678↙
            a=123,b=-858993460
    

    程序运行时,将123送a,而b没有被赋值,因为整型数据中不能出现小数点,但b=-858993460,是因为在对变量进行定义而不初始化时,系统会为变量分配一个随机值。

  • 需要注意的是,在使用格式说明符%c输入一个字符时,凡是从键盘输入的字符,包括空格、回车等都被作为有效字符接收。

    示例:

    #include <stdio.h>
    void main()
    {
        char ch1, ch2, ch3;
        scanf("%c%c%c", &ch1, &ch2, &ch3);
        printf("ch1=%c,ch2=%c,ch3=%c", ch1, ch2, ch3);
    }
    

    运行结果为:

    A B C
    ch1=A,ch2= ,ch3=B
    

    此时字符’A’存入ch1所代表的存储单元,’□’(空格)作为字符存入ch2代表的存储单元,字符’B’存入ch3代表的存储单元。

  • 如果在%后面有个“*” 附加说明符,表示跳过它指定的列数。
    示例:

    #include <stdio.h>
    void main()
    {
        int a, b;
        scanf("%2d %*3d %2d", &a, &b);
        printf("a=%d,b=%d", a, b);
    }
    

    运行结果为:

            12345 67↙
            a=12,b=67
    

酷客网(coolcou.com) – 专注IT精品教程和实例

赞(0)

评论 抢沙发

评论前必须登录!