sscanf

用C的sscanf函数可以实现类似C++中istringstream的功能。

有时候(少数情况下)题目并不给 出数据量,比如:

一般情况下如果给你三个整数会这样表示

3

4 5 6

这样可以先输入3,接着写一个循环读入整数,循环3次;

如果不先给定数据量只 给

4 5 6

就不知道有几个整数需要获取,一直scanf不能判断是否行结束。

可以先用gets把一行读到buffer 里,再用sscanf读出来。

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

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

chardata[] = "10 20 30";

intnum;

while( sscanf(data, "%d", &num)!=EOF ){

printf("%d", num);

}

这样写每次读出来的num都是10,

因为循环中每次都是从data[0]位置读出的,所以都是同一个数。

可以用 输入格式的%n参数获取读入的字符数,第二次读取的时候跳过前面已经读过的部分。

chardata[] = "10 20 30";

char* sp = data;

intnum;

intread;

while( sscanf(sp, "%d %n", &num, &read)!=EOF ){

printf("%d", num);

sp += read-1;

}

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

另外如果想从buffer里读出字符串而且buffer最后一个字符不是空格、tab或换行,

那么buffer中保存的最后一个字符 串就读不出来了,这时候需要在buffer末尾加上空格、tab或换行符,

并把串结束标识符"\0";后移一个位置才能正确读取字符 串。
原文链接: https://www.cnblogs.com/caogtaa/archive/2010/10/26/1861353.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/16592

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午4:57
下一篇 2023年2月7日 下午4:57

相关推荐