scanf sscanf fscanf

  1. scanf 从控制台输入   fscanf 从文件输入   sscanf 从指定字符串输入
  2. scanf
    1. 用法为 int scanf(const char * restrict format,...);
    2. scanf 是从标准输入读
    3. scanf一般情况下是碰到空格,制表符以及换行作为输入的结束
    4. 支持正则表达式 格式为  %[]
      1. []内是匹配的字符,^表示求反集,当遇到非集合内的字符时立即终止输入
      2. [a-z]  输入指定范围的小写字母,遇到非法字符立即终止
      3. [0-9] 输入指定范围的数字,遇到非法字符立即终止
      4. %[^a-z] 输入不包括指定字符的字符
      5. %*[a-z0-9] * 表示过滤满足条件的字符,也就是跳过满足条件的字符,其后一定要有新的%语句,否则无法读入
      6. int year,month,day;
        scanf("%d-%d-%d",&year,&month,&day) ;
        cout<<year<<" "<<month<<" "<<day<<endl;
        //输入 2020-1-10   输出 2020 1 10
         
        int income;
        scanf("%*[^0-9]%d",&income);
        cout<<income;
        // 输入 : Today‘s revenue is 3000  输出 : 3000
        // %*[0-9]过滤了前面的非数字
        
        
        
        char v1[100],v2[100];
        scanf("%[^\n]%*c%[^\n]",v1,v2);
         cout<<v1<<" "<<v2<<endl;
        //输入 : china
        //      USA
        //输出;  china USA
        //%[^\n] 可以读入一行,后面的%*c是为了过滤掉换行符
  3. fscanf
    1. 用法为 int fscanf(文件指针,格式字符串,输入列表);
    2. 返回值为读入的变量个数
    3. 支持的正则表达式与scanf相同
  4. sscanf()

原文地址:https://www.cnblogs.com/cyj1258/p/12178466.html

时间: 2024-08-12 07:02:31

scanf sscanf fscanf的相关文章

scanf,sscanf利用format跳过干扰的空格

scanf,sscanf利用format跳过干扰的空格 用了一点时间做读取配置部分的代码,希望一次记录上读取N个数据, 希望读取的格式就是一个IP地址加上端口号,希望把IP地址读取到4个短整数里面,端口号读取到另外的一个短整数.文字格式类似“192.120.1.120#8080”,但结果发现因为为了对齐,中间的空格干扰了读取. 读取的输入可能是这样“192.120.1.120   #     8080”,甚至可能是 " 192 .168 . 1 .120 # 8080 " 郁闷.goo

C语言中的printf(),sprintf(),scanf(),sscanf()

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望.由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出.这也导致sprintf 比printf 有用得多. printf 语法: #include <stdio.h> int printf( const char *format, ... ); printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中.返回

scanf和fscanf读取文件

这篇是针对推箱子游戏而写的,某个时候在学C语言,最近转到windows设计,不知道是否有同样的感受,后面的东西学了,前面的就有点生疏了.其实,我的理解是,注意力转移了,当集中于当前问题的时候就会忽略以前的某些知识.这也说明,人的注意力是随着时间,学习内容的不同在起变化.但是,只要稍微复习一下就能很快恢复. 还是先提出一个问题讨论起来才比较直观.比如一个文本文件的内容如下: [1]00000000000000000000000000000000000000000000000000000111000

scanf,sscanf高级用法

最近遇到了解析配置的问题,用正规表达式感觉大题小做,使用sscanf因只会用基本用法,感觉功能不够,上网搜了下,解析起来不费吹灰之力,代码也很简洁.原帖出处不详,网上到处是,我做了点修改 名称:sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型:Int  sscanf( string str, string fmt, mixed var1, mixed var2 ... );int  scanf( const char *format [,argument]... ); 说

计算进程消费cpu和内存

Linux下没有直接可以调用系统函数知道CPU占用和内存占用.那么如何知道CPU和内存信息呢.只有通过proc伪文件系统来实现. proc伪文件就不介绍了,只说其中4个文件.一个是/proc/stat,/proc/meminfo,/proc/<pid>/status,/proc/<pid>/stat proc/stat:存放系统的CPU时间信息 该文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻.不同内核版本中该文件的格式可能不大一致,以下通过实例来

C/C++中容易造成内存溢出的函数

1.strcpy() strcpy()函数将源字符串复制到缓冲区.没有指定要复制字符的具体数目.复制字符的数目直接取决于源字符串中的数目.如果源字符串碰巧来自用户输入,且没有专门限制其大小,则有可能会陷入大的麻烦中!建议使用strncpy(). 2.strcat() strcat()函数非常类似于 strcpy(),除了它可以将一个字符串合并到缓冲区末尾.它也有一个类似的.更安全的替代方法 strncat().如果可能,使用 strncat() 而不要使用 strcat(). 3. gets v

C中不安全函数

C 中大多数缓冲区溢出问题可以直接追溯到标准 C 库.最有害的罪魁祸首是不进行自变量检查的.有问题的字符串操作(strcpy.strcat.sprintf 和 gets).一般来讲,象“避免使用 strcpy()”和“永远不使用 gets()”这样严格的规则接近于这个要求. 今天,编写的程序仍然利用这些调用,因为从来没有人教开发人员避免使用它们.某些人从各处获得某个提示,但即使是优秀的开发人员也会被这弄糟.他们也许在危险函数的自变量上使用自己总结编写的检查,或者错误地推论出使用潜在危险的函数在某

C语言-字符串操作函数

gets(char buffer[]) 从标准输入读取一行, 并去掉换行符, 在字符串末尾增加 '\0' 字符, 写入到缓冲区 成功则返回 buffer 的地址, 出错或者遇到文件结尾则返回空指针, 使用 stdio 的  NULL 表示 fgets(char buffer[], int num, FILE * f) 从指定文件 f 中读取 num - 1 个字符, 去掉换行符, 并在末尾添加 '\0' 字符, 写入到 buffer scanf(const char * format [, ar

进程操作篇atexit execl exit fprintf fscanf getpid nice get priority printf setpid system vfork wait waitpid

atexit(设置程序正常结束前调用的函数) 相关函数 _exit,exit,on_exit 表头文件 #include<stdlib.h> 定义函数 int atexit (void (*function)(void)); 函数说明 atexit()用来设置一个程序正常结束前调用的函数.当程序通过调用exit()或从main中返回时,参数function所指定的函数会先被调用,然后才真正由exit()结束程序. 返回值 如果执行成功则返回0,否则返回-1,失败原因存于errno中. 范例 #