Я хочу отсканировать файл и пропустить строку текста перед чтением. Я старался:
fscanf(pointer,"\n",&(*struct).test[i][j]);
Но этот синтаксис просто начинается с первой строки.
Я хочу отсканировать файл и пропустить строку текста перед чтением. Я старался:
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
означает полную текстовую строку, заканчивающуюся новой строкой.
См. здесь.
'\n'
- это пробел, это означает, что используется любое количество любых пробелов, а не только одна новая строка. 28.10.2019 Непонятно, во что вы пытаетесь сохранить свои данные, поэтому нелегко угадать ответ, кстати, вы можете просто пропустить байты, пока не пройдете \n
:
FILE *in = fopen("file.txt", "r");
Тогда вы можете либо пропустить целую строку с fgets
, но это небезопасно (потому что вам нужно будет оценить длину строки априори), в противном случае используйте fgetc
:
char c;
do {
c = fgetc(in);
} while (c != '\n');
Наконец, у вас должны быть спецификаторы формата внутри вашего fscanf
для фактического анализа данных, например
fscanf(in, "%f", floatVariable);
вы можете обратиться здесь для спецификаторов.
Здесь подойдет 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 */