我问这个问题是因为我在 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/