簡體   English   中英

使用strtok從fgets獲取值

[英]get values from fgets using 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)等? 如何逃脫第一和第三行?

如果輸入格式正確,則可以使用sscanf() 請嘗試以下操作:

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

要僅處理Player* ,可以先執行memcmp() 喜歡,

if(memcmp(buff, "Player_", 7) == 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...
}

這將有效地跳過奇數行(具有匹配信息的奇數行),並且僅處理具有名稱以及得分和籃板數字的奇數行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM