zoukankan      html  css  js  c++  java
  • scanf函数(初学者)

    scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

    1、scanf函数的一般形式:scanf函数是一个标准的库函数,它的函数原型在头文件“stdio.h”中,与printf函数相同,C语言也允许在使用scanf函数之前不必包含stdio.h文件。

    scanf函数的一般形式为:scanf(“格式控制字符串”,地址列表);

    其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址列表中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成。

    例:&a,&b;//分别表示变量a和变量b的地址。

    变量地址是C编译系统分配的,用户不必关系具体地址是多少。

    变量的地址和变量值的关系如下;a=567  //a为变量名,567是变量的值,&a是变量a的地址。

    赋值语句左边是变量名,不能写地址,而scanf的本质也是给变量赋值,但要求写变量的地址,如&a。这两者在形式上是不同的。&是一个取地址运算符,&a是一个表达式,其功能是求变量的地址。

    例:

    #include <stdio.h>
    
    void main()
    {
        int a,b,c;
        printf("input a,b,c
    ");
        scanf("%d%d%d",&a,&b,&c);  //输入时应用回车或空格将两数隔开
        printf("a=%d,b=%d,c=%d",a,b,c);
    }

    2、格式字符串:格式字符串的一般形式为:%[*][输入数据宽度][长度]类型。

    (1)类型:与printf相同。

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

    如:scanf(“%d%*d%d",&a,&b);  //当输入为:1,2,3时,把1赋予a,2被跳过,3赋予b。

    (3)宽度:用十进制整数指定输入的宽度(即字符数)

    例:scanf("%5d",&a);

    输入:12345678    //只把12345赋予变量a,其余部分被截去。

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

    输入:12354678  //把1234赋予a,而把5678赋予b。

    (4)长度:长度格式符为l和h,l表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。h表示输入短整型数据。

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

    (2)scanf函数要求给出变量地址,若给出变量名则会出错。如scanf("%d",a);是非法的,应改为scanf(”%d“,&a);才是合法的。

    (3)在输入多个数值数据时,若格式控制串中无非格式字符做输入数据之间的间隔则可用空格,TAB或回车做间隔。C编程在碰到空格,TAB,回车或非法数据(如对”%d“输入”12A“时,A即为非法数据)时,即认为该数据结束。

    (4)在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符(空格也为字符)。

    例如:scanf("%c%c%c",&a,&b,&c);

    输入为:d e f

    则把“d”赋予a“ ”赋予b,“e“赋予c。只有输入为def时,才能把”d“赋予a,”e”赋予b,“f”赋予c。

    如果在格式控制中加入空格作为间隔。

    例:

    #include <stdio.h>
    
    void main()
    {
        char a,b;
        printf("input character a,b
    ");
        scanf("%c%c",&a,&b);
        printf("%c%c
    ",a,b);
    }

    由于scanf函数中“%c%c”无空格,输入M N结果只有M输出

    (5)若格式控制符中有非格式字符则输入时也要输入非格式字符。

    例:scanf("%d,%d,%d",&a,&b,&c);其中非格式字符”,“作为间隔符,故输入时应为5,6,7

    (6)如输入的数据与输出的类型不一致时,虽然编译能通过,但结果不正确。

    例:

    #include <stdio.h>
    void main()
    {
     int a;
     printf("input a number ");
     scanf("%d",&a);
     printf("%ld",a);
    }
    #include <stdio.h>
    
    void main()
    {
        long a;
        printf("input a long number
    ");
        scanf("%ld",&a);
        printf("%ld",a);
    }

    比较输入:1234567890

    由于输入的数据类型为整型,因此输出结果与输入数据不符。(有的编译器结果相同,这里仅对不同的做出解释)

    题目:输入三个小写字母,输出其ASCII码和对应的大写字母。

    #include <stdio.h>
    
    void main()
    {
        char a,b,c;
        printf("input charatera,b,c
    ");
        scanf("%c %c %c",&a,&b,&c);
        printf("%d%d%d
    %c,%c,%c
    ",a,b,c,a-32,b-32,c-32);
    }

    题目:输入各种类型的字节长度。

    #include <stdio.h>
    
    void main()
    {
        int a;
        long b;
        float f;
        double d;
        char c;
        printf("
    int:%d
    long:%d
    float:%d
    char:%d
    ",sizeof(a),sizeof(b),sizeof(f),sizeof(d),sizeof(c));
    }
  • 相关阅读:
    放大镜功能
    background兼容IE9以下版本
    JSON解析
    vue.js 组件-全局组件和局部组件
    i++ ++i的原子性
    【转】程序员面试笔试宝典
    【转】函数调用栈 格式化操作
    【转】TCP三次握手过程
    一些面试题
    【转】HP(惠普)大中华区总裁孙振耀退休感言
  • 原文地址:https://www.cnblogs.com/lvfengkun/p/10182789.html
Copyright © 2011-2022 走看看