• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

会点儿code

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

sscanf

用C的sscanf函数可以实现类似C++中istringstream的功能。
有时候(少数情况下)题目并不给 出数据量,比如:
一般情况下如果给你三个整数会这样表示
3
4 5 6
这样可以先输入3,接着写一个循环读入整数,循环3次;

如果不先给定数据量只 给
4 5 6
就不知道有几个整数需要获取,一直scanf不能判断是否行结束。
可以先用gets把一行读到buffer 里,再用sscanf读出来。

sscanf(buffer, "%d", &a);    // 从buffer中读一个整数

但是用 sscanf的时候有些地方要注意。

 

        char data[] = "10 20 30";
        int num; 
        while( sscanf(data, "%d", &num)!=EOF ){ 
                printf("%d", num); 
        }

这样写每次读出来的num都是10,
因为循环中每次都是从data[0]位置读出的,所以都是同一个数。
可以用 输入格式的%n参数获取读入的字符数,第二次读取的时候跳过前面已经读过的部分。

        char data[] = "10 20 30"; 
        char* sp = data; 
        int num; 
        int read; 
        while( sscanf(sp, "%d %n", &num, &read)!=EOF ){ 
                printf("%d", num); 
                sp += read-1; 
        } 

这样每次读出来都是不一样的数。

另外如果想从buffer里读出字符串而且buffer最后一个字符不是空格、tab或换行,
那么buffer中保存的最后一个字符 串就读不出来了,这时候需要在buffer末尾加上空格、tab或换行符,
并把串结束标识符"\0";后移一个位置才能正确读取字符 串。

posted on 2010-10-26 12:08  曹某  阅读(1025)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3