fscan.txt文件时如何跳过一行?

问题描述 投票:13回答:4

我想在阅读之前扫描文件并跳过一行文本。我尝试过:

fscanf(pointer,"\n",&(*struct).test[i][j]);

但是此语法只是从第一行开始。

c file file-io
4个回答
15
投票

fgets将获得一行,并从下一行开始设置文件指针。然后,您可以在第一行之后开始阅读所需内容。

char buffer[100];
fgets(buffer, 100, pointer);

只要您的第一行少于100个字符,就可以使用。否则,您必须检查并循环。


36
投票

我可以按照以下说明用scanf跳过行:

fscanf(config_file, "%*[^\n]\n");

格式字符串与包含任何字符(包括空格)的行匹配。格式字符串中的*表示我们对保存行不感兴趣,而只是对增加文件位置感兴趣。

格式字符串说明:%是每个scanf格式字符串开头的字符;*表示不要将找到的模式放在任何地方(通常将找到的模式保存到格式字符串后的参数中,在这种情况下,该参数为NULL);[^\n]表示换行符以外的任何字符;\n表示换行符;

所以[^\n]\n表示以换行符结尾的全文行。

参考here


12
投票

尚不清楚您要将数据存储到什么内容中,因此很难回答一个答案,因为您可以跳过字节,直到遍历\n

FILE *in = fopen("file.txt","rb");

然后您可以使用fgets跳过整行,但这是不安全的(因为您需要先估计行的长度),否则请使用fgetc

uchar8 c;
do
  c = fgetc(in);
while (c != '\n')

最后,在fscanf中应该有格式说明符,以便实际解析数据,例如

fscanf(in, "%f", floatVariable);

您可以将here用作说明符。


3
投票

[fgets将在这里工作。

#define MAX_LINE_LENGTH 80

char buf[MAX_LINE_LENGTH];

/* skip the first line (pFile is the pointer to your file handle): */
fgets(buf, MAX_LINE_LENGTH, pFile);

/* now you can read the rest of your formatted lines */
© www.soinside.com 2019 - 2024. All rights reserved.