扫描.text文件时如何跳过第一行?

时间:2010-05-09 23:43:55

标签: c file file-io

我正在使用C,而且我的知识非常基础。 我想扫描一个文件并在第一行或第二行之后获取内容......

我试过了:

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

但是这个语法只是从第一行= \

开始

这怎么可能?

感谢。

4 个答案:

答案 0 :(得分:35)

我能够使用以下指令跳过带有scanf的行:

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

格式字符串表示包含任何字符(包括空格)的行。格式字符串中的*和NULL指针意味着我们不想保存行,而只是增加文件位置。

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

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

参考here

答案 1 :(得分:14)

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

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

只要您的第一行长度少于100个字符,它就会起作用。否则,您必须检查并循环。

答案 2 :(得分: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 :(得分: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 */