我创建了一个通用函数,用于将配置字符串中写入的值解析为 double 值。当有两个值要读取时,解析包含这两个值的文本行的函数将提供一个定界字符串 delim_str
以了解是什么将两个值分开。我首先通过执行 sprintf(fmt, "%%lg%s%%lg", delim_str);
创建格式字符串 fmt
来进行解析,然后我使用它通过 sscanf(input_string, fmt, &v1, &v2);
进行解析。
当我使用 delim_str
时一切正常,例如 "- "
或 ", "
,当我使用它时出现问题使用 "x"
作为分隔符解析屏幕分辨率,它将像 1920x1080
这样的输入字符串解析为两个值,但如果第一个值为 0,则 0x1080
给我 v1
值 4224(0x1080 解释为十六进制值)而不是 0 并且 v2
未修改。
我可以考虑使用 strstr
在输入字符串中找到 delim_str
的开始,然后用它来创建两个新字符串,每个字符串一个,但是我感觉一定有更优雅的方法。
最佳答案
您可以使用 strtok/strtod 组合:strtok
获取两个字符串,然后 strtod
将其转换为所需的 double 格式。
它可能看起来像这样:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char input_string[] = "0x1080";
char delim_str[] = "x";
char *v1str = NULL;
char *v2str = NULL;
v1str = strtok(input_string, delim_str);
if(v1str != NULL) {
v2str = strtok(NULL, delim_str);
}
if(!v1str || !v2str) {
fprintf(stderr, "format error");
exit(1);
}
double v1 = strtod(v1str, NULL);
double v2 = strtod(v2str, NULL);
printf("%f %f", v1, v2);
return 0;
}
关于c - 使用 sscanf 将 "0x0"解析为两个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57508666/