c - 读取文本文件行中特定字符串后面的所有数字

标签 c string input scanf text-files

我问这个问题是因为我在 stackoverflow 上找到的类似问题的解决方案不允许我解决我的问题。我有一个 .txt 文件,如下所示:

VarA 10.0 20.0 30.0
VarBB 10
VarCz 1 2 3 4
VarDab 10 20 30 40 50
...

我正在尝试使用 sscanf 函数输出(例如将它们存储在变量中)与特定变量关联的数字。例如,当在文件中查找字符串 VarDab 时,我想将数字 10, 20, 30, 40, 50 存储在变量中。由于为特定字符串变量找到的数字数量不是恒定的,因此我尝试在循环中使用 sscanf 函数。但是,我没有得到我想要的结果。到目前为止我所做的代码:

FILE *fid;
char nameOfVariable[] = "VarDab";
int i;
while(!feof(fid))
{
    fgets(Line, maxLengthOfLine, fid);
    sscanf(Line, "%s", varString);
    if (strcmp(nameOfVariable, varString) == 0)
    {
        for (i = 0; i < maxLengthOfLine; i++)
        {
            sscanf(Line, "%lf%n", &varNumbers[i]);
        }
    }
}
flcose(fid);

编辑

根据评论,我能够通过在循环中的每个增量处向 Line 添加偏移量来修改当前的实现。似乎有效:

FILE *fid;
char nameOfVariable[] = "VarDab";
int i;
int variableIsFound = 1;
int offset = 0;
int numberOfNumbers = 5;

while(fgets(Line, maxLengthOfLine, fid) != NULL && variableIsFound)
{
    sscanf(Line, "%s %n", varString, &offset);
    if (strcmp(nameOfVariable, varString) == 0)
    {
        Line += offset;
        for (i = 0; i < numberOfNumbers; i++) {
            sscanf(Line, "%lf %n", &y[i], &offset);
            Line += offset;
        }
        variableIsFound = 0;
    }
}
fclose(fid);

最佳答案

您应该使用 strtok 将行拆分为标记,例如:

char *tok;
tok = strtok(Line, " "); // this is your String (first token in line)

tok = strtok(NULL, " "); // skip to next token (first number)
while (tok != NULL)
{
    printf("%s\n", tok); // use sscanf on tok to handle the numbers
    tok = strtok(NULL, " "); // skip to next token
}

关于c - 读取文本文件行中特定字符串后面的所有数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57895692/

相关文章:

c++ - 用于解析 C 类型声明的库?

javascript - jQuery 计数器插入逗号来分解字符串

java - 将 .txt 文件的内容读入二维字符串 ARRAYLIST

recursion - Common-Lisp 中的递归阶乘函数

javascript - 如何让输入警报消息仅在输入字母而不是数字时起作用?不让任何文字提示

c++ - 从 uint8_t 数组修改数据很慢?

c++ - C/C++ 中的指针和数组

node.js - 在 NodeJS 上同时接收相同的名称输入和多部分/表单数据输入作为数组和 FileAttachment

c - 如何区分到达 EOF 和到达错误的 fgets

javascript - 如何在 javascript/node js 中比较两个二进制值?