使用sscanf返回值

dal*_*985 3 c scanf

我想问你如何使用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)
Run Code Online (Sandbox Code Playgroud)

直到FROM我知道代码是那样的

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

这让我回报

Results FROM
Run Code Online (Sandbox Code Playgroud)

但我不知道如何继续使用sscanf.我不是很熟悉,我不知道如何逃避像(),_,等等的字符.

Jen*_*ens 5

输入中不改变的部分可以按字面指定,您不需要%*s来跳过它们.可以使用您使用的%*d和%*s跳过变体部分.运行这个

#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)";
    int tag;
    float Temp, Hum, AR, Volt;
    int n;

    n = sscanf (buff, "Parameters: %*d VALUES FROM %*d:%*d (%d) "
                      "Name_%*d:(Temp=%f,Hum=%f,AR=%f,Volt=%fV)",
                       &tag,    &Temp,   &Hum, &AR,  &Volt);
    if (n == 5) {
        printf ("tag = %d, Temp = %f, Hum = %f, AR = %f, Volt = %f\n",
                 tag, Temp, Hum, AR, Volt);
    } else {
        printf ("Couldn't scan all items (converted %d).\n", n);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

将输出

tag = 43, Temp = 21.450001, Hum = 45.650002, AR = 9.340000, Volt = 3.460000
Run Code Online (Sandbox Code Playgroud)

始终检查sscanf的返回值!你不想用垃圾值来对抗.请注意,格式中的单个空格会跳过任意​​数量的空格,因此)在输入中跳过换行符之后的空格.