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 charinput[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>, ...

为什么你会有其他期待?