作者gba356 (玛利欧)
看板C_and_CPP
标题Re: [问题] 遇到换行结束输入 in C
时间Tue May 5 16:18:39 2009
※ 引述《FrankTrjpp (请给我前叉)》之铭言:
: 很抱歉问了一个笨问题
: 可是刚才打关键字没找到相关方法 (不然就是找到C++的 = =a )
: 就是
: 我要读入一串数字(是int 不超过10个)
: 可能只有2个也可能有10个,结束输入於换行符号
: 请问要怎麽写呢?
: 找到最接近的方法是gets()读入string
: 然後用sscanf去读
: 不过因为没用过sscanf所以刚才sigmentation fault了XD
: 有更好的方法或者是正确的使用法吗@@
: 继续辜狗中...
这种测资读法比较正常的方法是 gets() + strtok():
#include<cstdio>
#include<cstring>
#define N 50
int main()
{
int n,num[N];
char s[N];
while( gets(s) )
{
int count = 0;
for( char *p = strtok(s," "); p ; p = strtok(NULL," "), count++ )
sscanf( p,"%d",&num[count] );
printf("%d\n",count);
for( int i=0;i<count;i++ )
printf("%d ",num[i]);
puts("");
}
}
附上一种特别的用法,用 sscanf() 的回传值计算个数
#include<cstdio>
#include<cstring>
#define N 50
int main()
{
int n,num[N];
char s[N];
while( gets(s) )
{
int count = 0;
n = sscanf( s,"%d%d%d%d%d%d%d%d%d%d",
&num[0],&num[1],&num[2],&num[3],&num[4],
&num[5],&num[6],&num[7],&num[8],&num[9] );
printf( "%d\n",n );
}
}
不过缺点就是後面的引数列要一个一个打,
数字不大的时候不失为一个好方法啦~
//此处 n 就是成功读入的变数个数
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.161.124.7
1F:推 ledia:别用 gets, 改用 fgets 避免 buffer overrun 的问题 05/05 16:24