• 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()时,对于参数列表应遵循以下规则:

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

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

  • 相关阅读:
    494. Target Sum 添加标点符号求和
    636. Exclusive Time of Functions 进程的执行时间
    714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票
    377. Combination Sum IV 返回符合目标和的组数
    325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
    275. H-Index II 递增排序后的论文引用量
    274. H-Index论文引用量
    RabbitMQ学习之HelloWorld(1)
    java之struts2的数据处理
    java之struts2的action的创建方式
  • 原文地址:https://www.cnblogs.com/wangliangliang/p/3192292.html
Copyright © 2020-2023  润新知