2016-09-01 35 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