【发布时间】:2011-02-17 11:33:49
【问题描述】:
我想在阅读前扫描一个文件并跳过一行文本。我试过了:
fscanf(pointer,"\n",&(*struct).test[i][j]);
但是这个语法只是从第一行开始。
【问题讨论】:
我想在阅读前扫描一个文件并跳过一行文本。我试过了:
fscanf(pointer,"\n",&(*struct).test[i][j]);
但是这个语法只是从第一行开始。
【问题讨论】:
我可以使用以下指令跳过带有 scanf 的行:
fscanf(config_file, "%*[^\n]\n");
格式字符串匹配包含任何字符(包括空格)的行。格式字符串中的* 表示我们对保存行不感兴趣,而只是对增加文件位置感兴趣。
格式字符串说明:%是每个scanf格式字符串开头的字符;*表示不要把找到的pattern放在任何地方(通常你保存pattern找到格式字符串后面的参数,此时参数为NULL);[^\n]表示除换行符以外的任何字符;\n表示换行符;
所以[^\n]\n 表示以换行符结尾的全文行。
参考here。
【讨论】:
'\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);
您可以参考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 */
【讨论】: