我想扫描一个文件并在读取之前跳过一行文本。 我尝试了:
fscanf(pointer,"\n",&(*struct).test[i][j]);
但是这个语法只是从第一行开始执行。
我能够通过以下指令在scanf中跳过行:
fscanf(config_file, "%*[^\n]\n");
格式字符串匹配包括空格在内的任何字符所在的行。格式字符串中的*
表示我们不关心保存该行,而只是增加文件位置。
格式字符串解释:
%
是每个scanf格式字符串开始的字符;
*
表示不将找到的模式放在任何地方(通常您将找到的模式保存到格式字符串后的参数中,在这种情况下,参数为NULL);
[^\n]
表示除换行符以外的任何字符;
\n
表示换行符;
所以[^\n]\n
表示一个以换行符结尾的完整文本行。
参考此处。
fgets函数会获取一行文本,并将文件指针定位到下一行开头。随后,你可以从第二行开始读取你需要的内容。
char buffer[100];
fgets(buffer, 100, pointer);
只要你的第一行少于100个字符,它就可以工作。否则,你必须进行检查和循环。
不清楚你是想将数据存储在何处,因此很难猜出答案,不过你可以跳过字节,直到遇到一个\n
:
FILE *in = fopen("file.txt", "r");
你可以使用fgets
跳过整行,但这种方法不安全(因为你需要预估该行的长度),否则你可以使用fgetc
:
char c;
do {
c = fgetc(in);
} while (c != '\n');
最后,在你的fscanf
中应该有格式说明符,以实际解析数据,例如:
fscanf(in, "%f", floatVariable);
您可以在此处查看说明符。
#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 */
'\n'
是空格,它表示会消耗任意数量的任何空格,不仅仅是单个换行符。 - hyde