Существуют и другие подходы (например, вы могли бы использовать Flex), но я думаю, что несколько лучше было бы использовать sscanf
:
char buffer[256];
char value[128];
fgets(buffer, sizeof(buffer), fp);
if (1==sscanf(buffer, "x=%127s", value))
// we read a value -- now use it however needed.
Редактировать: основная идея здесь довольно проста,Мы начинаем с чтения целого, как с fgets
.Затем мы используем sscanf
, чтобы попытаться сопоставить x=<whatever>
в этой строке.Если мы найдем это, у нас будет ценность, о которой мы заботимся.Если мы не нашли его, sscanf вернет 0, так как он возвращает количество преобразованных элементов - и если он не соответствует указанному x=
, он ничего не преобразует, поэтому sscanf вернет 0и мы знаем, что эта строка не совпадает.
Редактировать 2: Вот небольшая демонстрационная программа, которая считывает данные из файла и распечатывает значения для строк, следующих за формой x=<whatever>
, с разрешенными пробеламидо и после x
и =
:
#include <stdio.h>
int main() {
FILE *infile = fopen("Somefile.txt", "r");
char buffer[256];
char value[128];
while (fgets(buffer, sizeof(buffer), infile))
if (1 == sscanf(buffer, " x = %127s", value))
printf("Value = %s\n", value);
return 0;
}
Я проверил это с помощью ввода:
some junk
#a comment
a = 1 ; a couple other variables.
b = 2
x = 3
x = 4
x=5
Результат, который я получил:
Value = 3
Value = 4
Value = 5