2015-06-20 29 views
0

目前,我有這個閱讀>C:使用與fgets()從文件

FILE *in=fopen("some_file.txt", "r"); 
char input[3]; 
int i=0, j=0; 

if(in!=NULL) { 
    fgets(input, sizeof(input), in); 
    initialize(input); 
} 

    while(j<100) { 
    fgets(input, sizeof(input), in); 
    addNode(head,input); 
    j++; 
    } 
fclose(in); 

display(); 

我覺得我有問題fgets()。在我看來,三個字符> input[0] = some char,input[1] = '\0',input[2] = not_important

而且,這看起來不錯,但是,在我的文件中有一些包含2個字符的元素。這就是問題出現的地方。 我相信這個輸入應該可以工作:

input[0] = some char,input[1] = 'some_char',input[2] = '\0'。 但是,它不...

輸入文件>

A B C dË

Q寬E [R泰

Z X C V中乙

我的輸出:

數據1:

數據2:乙

數據3:C

數據4:d

數據5:電子

數據6:Q

數據7:W

數據8:E

數據9,R

數據10:TY

數據11:

數據12位:Z

數據13:X,然後將其返回到 「正常」

因此,添加了一個不應該存在的元素......它添加在具有兩個字符的元素之後。這個元素也在線路的盡頭,但我不認爲這與它有任何關係。

任何想法?

我只是測試它,以及具有兩個chars元素看起來像這樣:

輸入[0] = 'Y' 輸入[1] = 'U' 輸入[2] = '\ 0'

正如我想象的那樣......但仍然,創建一個節點...

另一項測試:下一個元素,這一次後,也有input[0]=some_char,因爲它應該...

回答

1

由於文檔說,fgets讀取到一個新行,但比size字符少至多一個。如果讀取所有內容,但不包括換行符,則下一次讀取將讀取換行符並停止。

因此,每次讀取最多可以讀取兩個字符,除非被換行符停止。你讀的A<space>B<space>C<space>D<space>E<newline>Q<space>W<space>E<space>R<space>Ty<newline>Z<space>,...

爲什麼你會想到什麼嗎?

+0

OMG當然可以!非常感謝!我只是略過將下一次閱讀添加到列表中,問題將得到解決。 – Rorschach