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

NLe*_*Led 13 c file scanf

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

我试过了 :

fscanf(pointer,"\n",&(*struct).test[i][j]);
Run Code Online (Sandbox Code Playgroud)

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

这怎么可能 ?

谢谢.

Zac*_*Zac 36

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

fscanf(config_file, "%*[^\n]\n");
Run Code Online (Sandbox Code Playgroud)

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

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

所以这\n意味着以换行符结尾的全文行.

参考这里.

  • `'\n'` 是空白,这意味着消耗任意数量的空白,而不仅仅是单个换行符。 (2认同)

Whi*_*ind 14

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

char buffer[100];
fgets(buffer, 100, pointer);
Run Code Online (Sandbox Code Playgroud)

只要您的第一行长度少于100个字符,它就可以正常工作.否则,您必须检查并循环.


Jac*_*ack 13

目前尚不清楚你要将数据存储到什么地方,所以要猜出答案并不容易,你可以跳过字节,直到你过去\n:

FILE *in = fopen("file.txt", "r");
Run Code Online (Sandbox Code Playgroud)

然后你可以跳过整行,fgets但它不安全(因为你需要先验估线的长度),否则使用fgetc:

char c;
do {
  c = fgetc(in);
} while (c != '\n');
Run Code Online (Sandbox Code Playgroud)

最后你应该在你的内部使用格式说明符fscanf来实际解析数据,比如

fscanf(in, "%f", floatVariable);
Run Code Online (Sandbox Code Playgroud)

你可以在这里参考说明者.