Во-первых, в fscanf()
нет ничего плохого. Первое, что вы должны знать, это то, что fscanf обрабатывает символы новой строки как пробелы. Таким образом, даже если вы смотрите на файл как на отдельные строки, fscanf видит его как:
setting1 = 1 setting2 = 2 setting3 = 3
Это НЕ проблема, но это влияет на то, как вы могли бы написать код fscanf для чтения этой текстовой строки. Этот следующий простой подход слишком прост?!
fscanf(fp, " setting1 = %d", &setting1);
fscanf(fp, " setting2 = %d", &setting2);
fscanf(fp, " setting3 = %d", &setting3);
Примечание. В форматах для fscanf
есть начальный пробел. Это делается для того, чтобы сканер не мог найти ни одного, одного или нескольких пробельных символов. Если в строках текстового файла есть начальные пробелы, совпадение НЕ будет найдено, если только этот начальный пробел не указан в формате. Это имеет смысл, потому что в начале строки может быть несколько пробелов.
Открытие файла с чтением и добавлением также работает, если fscanf закодирован правильно.
Заставьте это работать. Теперь, есть ли в файле больше, чем три настройки? Если это так, то ваш код fscanf должен быть более сложным, а может и нет. Помните, что идея состоит в том, чтобы читать данные, если ваш код читает данные, то все готово.
Ради интереса я попробовал следующие fscanfs:
fscanf(fp, " setting1 = %i ", &setting1);
fscanf(fp, "setting2 = %i ", &setting2);
fscanf(fp, "setting3 = %i", &setting3);
Обратите внимание, что «странно расположенные пробелы в определении формата позволяют использовать один или несколько пробелов между каждым из ключевых слов.
И последний комментарий. Ваш код должен учитывать, что ключевое слово может быть написано пользователем с ошибкой, и в этом случае fscanf не работает. Таким образом, всегда сохраняйте или проверяйте возвращаемое значение из fscanf:
int x;
x = fscanf(fp, " setting1 = %d", &setting1);
if (x == 0) { // keyword setting1 was misspelled...
И по мелочам дня:
x = fscanf(fp, " s e t t i n g 1 = %d", &setting1); // also works
person
Community
schedule
19.08.2013