2016-09-01 33 views
1

我想以一种载入简单变量和值的方式读取C文件。例如,让我们说这是文件的文本:在c中使用分隔符'fscanf'

a=100 
b=hello 
c=world 

流的想法是加载文件的每一行,使得在等号左边的字符串签署将是变量的名称,右边的字符串将作为值加载。这是一个会阅读我所描述的方式文件的代码:

#include <stdio.h> 

int main(void) 
{ 
    FILE* f; 
    f = fopen("test.txt", "r"); 

    char name[256]; 
    char value[256]; 

    while(fscanf(f, "%255[^=]=%255[^=]", name, value) == 2) 
     printf("%s, %s\n", name, value); 

    return 0; 
} 

但是当我编译并运行它,我得到的输出是:

a, 100 
b 

我应该有口难言对于格式化字符串,scanffscanf中的分隔符的工作方式只有非常基本的掌握。我有一种感觉是这里出了问题,但我还没有找到或偶然找到解决方案。任何帮助,将不胜感激!

+0

你可能最好关闭使用基于行的输入(['与fgets()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html)或 [' getline()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html)),接着是'sscanf()' - 但是你仍然会使用[advice](http://来自[user3121023](http://stackoverflow.com/users/3121023/user3121023)的stackoverflow.com/questions/39281646/using-delimiters-for-fscanf-in-c#comment65897740_39281646)。 –

回答

2

%255[^=]将读取从第一行的=到第二行的=的所有内容,因为您没有包含换行符作为分隔符。所以它将name设置为"100\nb"。下一个fscanf()失败,因为在=之前没有字符串。

使用换行符作为第二个分隔符而不是=,并在第一个格式之前放置一个空格,以便在解析每行之前跳过空白。

while(fscanf(f, " %255[^=]=%255[^\n]", name, value) == 2) 
+0

试过了,完美无缺!非常感谢! – dakatk