• scanf,fscanf,sscanf的区别


    scanf是从文件中读

    sscanf是从字符串中读
    scanf是从键盘输入中读
     

    fread :以字节位计算长度,按照指定的长度和次数读取数据,遇到结尾或完成指定长度读取后停止.
    fscanf :格式化读取,按照指定的格式串进行读取数据,并将数据初始化为指定的格式.所以在文本方式下才能有效的判断数据内容.
    fgets :整行读取,遇到回车换行或结尾停止.在文本方式时使用.

    其实文本和二进制的差别就在于读取的数据,文本方式会默认为是ASCII码,二进制方式则原样将数据读出.所以文本时候的格式控制如回车,制表符等,

    二进制的时候是不能有效的自动判断的。 

    scanf 从控制台输入 

    fscanf 从文件输入 
    sscanf 从指定字符串输入

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

    #include
    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);
    return 0;
    }
     
    2、int fscanf(文件指针,格式字符串,输入列表);
     
    功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
    用 法: int fscanf(FILE *stream, char *format,[argument...]);
    如:
    FILE *fp;
    char a[10];
    int b;
    double c;
    fscanf(fp,"%s%d%lf",a,&b,&c)
    返回值:整型,成功读入的参数的个数

    3、大家都知道sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。但新手可能并不知道处理字符串时的一些高级用法,这里做个简要说明吧。

    1. 常见用法。
    char str[512] = {0};
    sscanf("123456 ", "%s", str);
    printf("str=%s ", str);

    2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
    sscanf("123456 ", "%4s", str);
    printf("str=%s ", str);//str的值为1234

    3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
    sscanf("123456 abcdedf", "%[^ ]", str);//注意^后面有一空格
    printf("str=%s ", str);

    4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
    sscanf("123456abcdedfBCDEF", "%[1-9a-z]", str);
    printf("str=%s ", str);

    5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
    sscanf("123456abcdedfBCDEF", "%[^A-Z]", str);
    printf("str=%s ", str);

    源代码一如下:

    [html] view plain copy
     
     print?
    1. #include <</span>stdio.h>  
    2. #include <</span>stdlib.h>  
    3.   
    4. char *tokenstring = "12:34:56-7890";  
    5. char a1[3], a2[3], a3[3];  
    6. int i1, i2;  
    7.   
    8. void main(void)  
    9. {  
    10.    sscanf(tokenstring, "%2s:%2s:%2s---", a1, a2, a3, &i1, &i2);  
    11.    printf("%s %s %s %d %d ", a1, a2, a3, i1, i2);  
    12.    getch();  
    13. }   


    源代码二如下:

    [html] view plain copy
     
     print?
    1. #include <</span>stdio.h>  
    2. #include <</span>stdlib.h>  
    3.   
    4. char *tokenstring = "12:34:56-7890";  
    5. char a1[3], a2[3], a3[3],a;  
    6. int i1, i2;  
    7.   
    8. void main(void)  
    9. {  
    10.    sscanf(tokenstring, "%2s%1s%2s%1s%2s%1s--", a1, &a, a2, &a3, a3, &a, &i1, &i2);  
    11.    printf("%s %s %s %d %d ", a1, a2, a3, i1, i2);  
    12.    getch();  
    13. }   

    结果同上


    源代码三如下:

    [html] view plain copy
     
     print?
    1. #include <</span>stdio.h>  
    2. #include <</span>stdlib.h>  
    3.   
    4. char *tokenstring = "12:34:56-7890";  
    5. char a1[3], a2[3], a3[3], a4[3], a5[3];  
    6. int i1, i2;  
    7.   
    8. void main(void)  
    9. {  
    10.    char a;  
    11.    sscanf(tokenstring, "%2s%1s%2s%1s%2s%1s%2s%2s", a1, &a, a2, &a3, a3, &a, a4, a5);  
    12.    i1 =atoi(a4);  
    13.    i2 =atoi(a5);  
    14.   
    15.    printf("%s %s %s %d %d ", a1, a2, a3, i1, i2);  
    16.    getch();  
    17. }  

    结果同上


    方法四如下(以实例说明,原理相同):

    [html] view plain copy
     
     print?
    1.   
    2.   
    3. #include <</span>math.h>  
    4. #include <</span>stdio.h>  
    5. #include <</span>stdlib.h>  
    6.   
    7. char *tokenstring = "first,25.5,second,15";  
    8. int result, i;  
    9. double fp;  
    10. char o[10], f[10], s[10], t[10];  
    11.   
    12. void main()  
    13. {  
    14.    result = sscanf(tokenstring, "%[^','],%[^','],%[^','],%s", o, s, t, f);  
    15.    fp = atof(s);  
    16.    i = atoi(f);  
    17.    printf("%s  %lf  %s  %d ", o, fp, t, i);  
    18. }  
  • 相关阅读:
    Debian Linux下如何以root账号登录桌面
    原 Debian设置开机自动启动与关闭
    Qt中使用QProcess备份和恢复Mysql数据库
    mysqldump 的一些使用参数
    Mysql导出表结构及表数据 mysqldump用法
    启动和启动和停止MySQL服务停止MySQL服务
    Debian中完全卸载MySQL
    dd,实现系统备份
    NeHe OpenGL教程 第十九课:粒子系统
    NeHe OpenGL教程 第十八课:二次几何体
  • 原文地址:https://www.cnblogs.com/klb561/p/10391471.html
Copyright © 2020-2023  润新知