用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
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!