zoukankan      html  css  js  c++  java
  • scanf

    scanf函数,与printf函数一样,都被定义在stdio.h里,因此在使用scanf函数时要加上#include。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其关键字最末一个字母f即为“格式”(format)之意。

    函数原型

    int scanf( const char *format, ... );

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

    其调用格式为: scanf("<格式化字符串>",<地址表>);

    函数 scanf() 是从标准输入流 stdio 中读内容的通用子程序,可以读入全部固有类型的数据并自动转换成机内形式。

    返回值

    scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。

    如:

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

    如果a和b都被成功读入,那么scanf的返回值就是2

    如果只有a被成功读入,返回值为1

    如果a和b都未被成功读入,返回值为0

    如果遇到错误或遇到end of file,返回值为EOF。

    且返回值为int型.

    例:使用scanf函数输入数据。

    #include<stdio.h>

    int main()

    {

    int a,b,c;

    printf("输入 a, b, c ");

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

    printf("a = %d b = %d c = %d ", a, b, c);

    fflush(stdin);

    return 0;

    }

    注意上面的scanf("%d,%d,%d",&a,&b,&c);中%d,%d,%d之间有逗号,在输入数据时也要加逗号,如果去掉逗号,输入时就不用逗号,而用空格,tab键或回车键将各个数据隔开

    &a,&b,&c中的&是地址运算符,&a指a在内存中的地址。scanf的作用是:按照a,b,c的内存地址将a,b,c的值存进去。变量a,b,c的地址是在编译连续阶段分配的。

    这里注意:如果scanf中%d是连着写的如“%d%d%d”,在输入数据是,数据之间不可以加逗号,只能是空格或tab键——“2 3 4”/“2(按tab)3(按tab)4(按tab)”。若是“%d,%d,%d”,则在输入数据时需要加“,”——“2,3,4”.

    注意问题

    (1)对于字符串数组或字符串指针变量,由于数组名和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。

    (2)可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。

    (3) scanf()函数中没有精度控制。

    如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。

    (4) scanf中要求给出变量地址,如给出变量名则会出错

    如 scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。

    (5)在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。

    C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。

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

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

    输入为:

    d e f

    则把'd'赋予a, ' (空格)'赋予b,'e'赋予c。因为%c 只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把' '作为下一个字符送给b。

    只有当输入为:def 时,才能把'd'赋于a,'e'赋予b,'f'赋予c。

    备注:使用 scanf()时,对于参数列表应遵循以下规则:

    如果希望读取基本数据类型变量的值,应在变量名的前面加上符号&

    当读取指针变量指向的值时,在变量名前不能使用&

  • 相关阅读:
    深入浅出百度地图API开发系列(3):模块化设计
    深入浅出百度地图API开发系列(2):创建地图
    深入浅出百度地图API开发系列(1):前言
    使用分页助手pageHelper,方便快捷
    mybatis注解模糊查询的两种方式
    idea svn 提交拉取代码抛出 Error:'C:Program' 不是内部或外部命令,也不是可运行的程序 或批处理文件
    Could not open ServletContext resource [/WEB-INF/applicationContext.xml]”解决方案
    com.sun.jersey.api.client.UniformInterfaceException
    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
    继承关系,子类初始化,类中成员的加载顺序
  • 原文地址:https://www.cnblogs.com/wangliangliang/p/3192292.html
Copyright © 2011-2022 走看看