如何在c中扫描以逗号分隔的字符串中的数字

如何在c中扫描以逗号分隔的字符串中的数字,c,string,scanf,C,String,Scanf,我正在尝试扫描由逗号分隔的字符串中的RGB值 char colors[11]= "255,80,120"; int r,g,b; sscanf("%3[^,]%d", colors, &r, &g, &b); 但当我尝试打印这些值时,它们都是0。我该怎么做?我只是想把这部分搞定,但这将被实现成代码,根据音乐的节拍点亮一个LED条,所以这将需要循环,所以如果有人也能帮助这部分,那就太好了。您对int-sscanfcont char*str,const char*forma

我正在尝试扫描由逗号分隔的字符串中的RGB值

char colors[11]= "255,80,120";
int r,g,b;
sscanf("%3[^,]%d", colors, &r, &g, &b);
但当我尝试打印这些值时,它们都是0。我该怎么做?我只是想把这部分搞定,但这将被实现成代码,根据音乐的节拍点亮一个LED条,所以这将需要循环,所以如果有人也能帮助这部分,那就太好了。

您对int-sscanfcont char*str,const char*format,…,的调用是错误的。第一个参数应该是要从中解析数据的字符串,而不是格式。此外,您必须将格式从%3[^,]%d更改为%d,%d,%d。因此,您的代码应该是:

sscanf(colors, "%d,%d,%d", &r, &g, &b);
而不是:

sscanf("%3[^,]%d", colors, &r, &g, &b);

还考虑增加颜色的大小,以便它可以保持字符串的所有字符以及空字符0。< /P> 编辑:正如@chux在评论中提到的,应检查sscanf的返回值,以便处理错误情况:

if (sscanf(colors, "%d,%d,%d", &r, &g, &b) != 3) {
    /* Handle errors. */
}

使用strtok颜色循环,健壮的代码检查sscanf的返回值,以确保扫描成功。建议您选择%d、%d、%d、&r、&g、&b!=3做一些错误处理@我完全同意。