3

sscanf を使用して値 043、21.45、45.65、9.34、3.46 を取得する方法を教えてください。

Parameters: 43 VALUES FROM 0000:0000 (043)
Name_8:(Temp=21.45,Hum=45.65,AR=9.34,Volt=3.46V)

FROMまでは、コードがそのようなものであることを知っています

char str[20];
sscanf(buff,"%*s %*d %*s %s",str);
printf("Results %s\n",str);

そして、これは私を返します

Results FROM

しかし、sscanf を続行する方法がわかりません。私はあまり詳しくなく、()、_、: などの文字をエスケープする方法がわかりません。

4

3 に答える 3

0
#include <stdio.h>

int main(void){
    char buff[] = "Parameters: 43 VALUES FROM 0000:0000 (043)\n"
                "Name_8:(Temp=21.45,Hum=45.65,AR=9.34,Volt=3.46V)";
    char dev[25], temp[25], hum[25], ar[25], volt[25];
    int pos = 0, len;
    sscanf(buff, "%*[^(](%[^)])%n", dev, &len);
    pos += len;
    sscanf(buff + pos, "%*[^(](Temp=%[^,],%n", temp, &len);
    pos += len;
    sscanf(buff + pos, "Hum=%[^,],%n", hum, &len);
    pos += len;
    sscanf(buff + pos, "AR=%[^,],%n", ar, &len);
    pos += len;
    sscanf(buff + pos, "Volt=%[^V]V%n", volt, &len);
    printf("dev:%s\n", dev);
    printf("temp:%s\n", temp);
    printf("hum:%s\n", hum);
    printf("ar:%s\n", ar);
    printf("volt:%s\n", volt);
    return 0;
}
于 2013-06-04T09:23:16.057 に答える
0

最初の行では、このようなことを試すことができます.しかし、2行目はトリッキーかもしれません:)

 char f1[] = "Parameters: 43 VALUES FROM 0000:0000 (043)";
 int d = 0;
 sscanf(f1, "%*s %*s %*s %*s %*s (%d)",&d);
 printf("D %d \n", d);

ただし、数値の間にスペースを追加して2番目のように変更できる場合

 char f2[] = "Name_8:(Temp= 21.45,Hum= 45.65,AR= 9.34,Volt= 3.46V)";

次に、これを使用して float 値を読み取ることができます

float te= 0, h = 0, ar = 0, v = 0;
sscanf(f2, "%*s %f%*s %f%*s %f%*s %f)",&te, &h, &ar, &v);
于 2013-06-04T08:08:42.860 に答える