使用strtok从fgets获取值

时间:2013-06-11 08:29:16

标签: c fgets strtok

我每隔10秒钟从外部机器(总共4行)收到一些数据,如:

Yesterday match:
Player_1:(P=31,Reb=12)
Yesterday match:
Player_2:(P=12,Reb=2)

我有以下代码读取数据(我也打开并配置串口功能):

int learn_data(int fd)
{
  int n,i;
  char buff[200];
  memset(buff, 0, sizeof(buff));
  char* ptr;
  FILE *fp=fdopen(fd,"r");
 while(fgets(buff, sizeof(buff), fp) != NULL)
 { 
    printf("%s", buff);
 }
}

使用此代码,fgets逐行读取缓冲区。现在我的问题是,如何使用strtok获得积分和篮板(31,12),(12,2)等的值?我怎么能逃脱第一和第三线?

2 个答案:

答案 0 :(得分:0)

如果你有一个格式良好的输入,你可以使用sscanf()。请尝试以下方法:

int P, Reb;
sscanf(buff, "%*7s%*d%*4s%d%*5s%d", &P, &Reb);

要仅处理Player*,您可以先memcmp()进行操作。像,

if(memcmp(buff, "Player_", 7) == 0) ...

答案 1 :(得分:0)

这取决于播放器名称的格式 - 特别是名称是否包含空格。我可能会用:

while (fgets(buff, sizeof(buff), fp))
{
    int points, rebounds;
    if (sscanf(buff, "%100[^(](P=%d,Reb=%d)", &points, &rebounds) == 2)
        ...process a valid entry...
}

这将有效地跳过奇数行(带有匹配信息的那些),并且只会处理那些带有名字以及积分和反弹数字的行。