C: 使用 fgets() 从文件中读取
C: using fgets() to read from file
我目前有这个>
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] = '[=13=]'
, input[2] = not_important
.
而且,这看起来不错,但是,在我的文件中有几个包含 2 个字符的元素。这就是问题开始的地方。
我相信这个输入应该有效:
input[0] = some char
、input[1] = 'some_char'
、input[2] = '[=17=]'
。
但是,它没有...
输入文件>
A B C D E
Q W E R Ty
Z X C V B
我的输出:
Data 1: A
Data 2: B
Data 3: C
Data 4: D
Data 5: E
Data 6: Q
Data 7: W
Data 8: E
Data 9: R
Data 10: Ty
Data 11:
Data 12: Z
Data 13: X and then it goes back to "normal"
因此,添加了一个不应该存在的元素...它添加在具有两个字符的元素之后。该元素也在该行的末尾,但我认为这与它没有任何关系。
有什么想法吗?
我刚测试了一下,有两个chars
的元素是这样的:
input[0]='Y' input[1]='u' input[2]='[=22=]'
正如我想象的那样...但是,仍然创建了一个节点...
另一个测试:下一个元素,在这个元素之后,也有 input[0]=some_char
因为它应该...
正如文档所说,fgets
读取一个换行符,但最多少于 size
个字符。如果读取所有内容直到但不包括换行符,则下一次读取将读取该换行符并停止。
因此每次读取最多读取两个字符,除非被换行符停止。您的读数是 A<space>
、B<space>
、C<space>
、D<space>
、E<newline>
、Q<space>
、W<space>
、E<space>
, R<space>
, Ty
, <newline>
, Z<space>
, ...
为什么你会有其他期待?
我目前有这个>
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] = '[=13=]'
, input[2] = not_important
.
而且,这看起来不错,但是,在我的文件中有几个包含 2 个字符的元素。这就是问题开始的地方。 我相信这个输入应该有效:
input[0] = some char
、input[1] = 'some_char'
、input[2] = '[=17=]'
。
但是,它没有...
输入文件>
A B C D E
Q W E R Ty
Z X C V B
我的输出:
Data 1: A
Data 2: B
Data 3: C
Data 4: D
Data 5: E
Data 6: Q
Data 7: W
Data 8: E
Data 9: R
Data 10: Ty
Data 11:
Data 12: Z
Data 13: X and then it goes back to "normal"
因此,添加了一个不应该存在的元素...它添加在具有两个字符的元素之后。该元素也在该行的末尾,但我认为这与它没有任何关系。
有什么想法吗?
我刚测试了一下,有两个chars
的元素是这样的:
input[0]='Y' input[1]='u' input[2]='[=22=]'
正如我想象的那样...但是,仍然创建了一个节点...
另一个测试:下一个元素,在这个元素之后,也有 input[0]=some_char
因为它应该...
正如文档所说,fgets
读取一个换行符,但最多少于 size
个字符。如果读取所有内容直到但不包括换行符,则下一次读取将读取该换行符并停止。
因此每次读取最多读取两个字符,除非被换行符停止。您的读数是 A<space>
、B<space>
、C<space>
、D<space>
、E<newline>
、Q<space>
、W<space>
、E<space>
, R<space>
, Ty
, <newline>
, Z<space>
, ...
为什么你会有其他期待?