我正在使用C,而且我的知识非常基础。 我想扫描一个文件并在第一行或第二行之后获取内容......
我试过了:
fscanf(pointer,"\n",&(*struct).test[i][j]);
但是这个语法只是从第一行= \
开始这怎么可能?
感谢。
答案 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 */