我目前有这个>
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()
存在问题。在我看来,三个字符是&gt;
input[0] = some char
,input[1] = '\0'
,input[2] = not_important
。
而且,这看起来还不错,但是,在我的文件中有几个包含2个字符的元素..这就是问题的起点。 我相信这个输入应该有效:
input[0] = some char
,input[1] = 'some_char'
,input[2] = '\0'
。
但是,它没有......
输入文件&gt;
A B C D E
Q W E R Ty
Z X C V B
我的输出:
数据1:A
数据2:B
数据3:C
数据4:D
数据5:E
数据6:问
数据7:W
数据8:E
数据9:R
数据10:Ty
数据11:
数据12:Z
数据13:X然后又回到“正常”
因此,添加了一个不应该存在的元素......它在具有两个字符的元素之后添加。该元素也在最后,但我不认为这与它有任何关系。
有什么想法吗?
我刚测试了它,带有两个chars
的元素如下所示:
输入[0] ='Y'输入[1] ='u'输入[2] ='\ 0'
就像我想象的那样......但是,仍然会创建一个Node ...
另一个测试:在此之后的下一个元素,也应该有input[0]=some_char
......
答案 0 :(得分: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>
,...
为什么你会期待别的什么?