0

我每 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) 等的值?我怎样才能逃脱第一和第三行?

4

2 回答 2

0

如果您有格式良好的输入,则可以使用sscanf(). 尝试以下操作:

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

只处理Player*,你可以先做memcmp()。像,

if(memcmp(buff, "Player_", 7) == 0) ...
于 2013-06-11T08:42:44.467 回答
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...
}

这将有效地跳过奇数行(带有匹配信息的行),并且只会处理带有名称以及得分和篮板数的行。

于 2013-06-11T13:26:18.380 回答