我想在阅读之前扫描文件并跳过一行文本。我尝试过:
fscanf(pointer,"\n",&(*struct).test[i][j]);
但是此语法只是从第一行开始。
fgets将获得一行,并从下一行开始设置文件指针。然后,您可以在第一行之后开始阅读所需内容。
char buffer[100];
fgets(buffer, 100, pointer);
只要您的第一行少于100个字符,就可以使用。否则,您必须检查并循环。
我可以按照以下说明用scanf跳过行:
fscanf(config_file, "%*[^\n]\n");
格式字符串与包含任何字符(包括空格)的行匹配。格式字符串中的*
表示我们对保存行不感兴趣,而只是对增加文件位置感兴趣。
格式字符串说明:%
是每个scanf格式字符串开头的字符;*
表示不要将找到的模式放在任何地方(通常将找到的模式保存到格式字符串后的参数中,在这种情况下,该参数为NULL);[^\n]
表示换行符以外的任何字符;\n
表示换行符;
所以[^\n]\n
表示以换行符结尾的全文行。
参考here。
尚不清楚您要将数据存储到什么内容中,因此很难回答一个答案,因为您可以跳过字节,直到遍历\n
:
FILE *in = fopen("file.txt", "r");
然后您可以使用fgets
跳过整行,但这是不安全的(因为您需要先估计行的长度),否则请使用fgetc
:
uchar8 c;
do {
c = fgetc(in);
} while (c != '\n');
最后,在fscanf
中应该有格式说明符,以便实际解析数据,例如
fscanf(in, "%f", floatVariable);
您可以将here用作说明符。
[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 */