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";后移一个位置才能正确读取字符
串。