C ++ чтение / запись в два разных файла (нужна помощь в понимании того, какой синтаксис использовать)

Да, есть:

class Point(val x: Int, val y: Int)
0
задан halfer 18 March 2019 в 18:21
поделиться

1 ответ

fgets(text, 80, infile);

fgets() - это функция библиотеки C, которая ожидает char * в качестве своего первого параметра. Он абсолютно ничего не знает ни о каком классе C ++, и не только о std::string, который вы передаете в качестве первого параметра. Также fgets() не имеет никакого представления о классе C ++ std::ifstream, который вы пытаетесь передать ему в качестве третьего параметра. И это именно то, что говорится в сообщении об ошибке вашего компилятора.

Вы случайно смешиваете код на C и C ++, что приводит к повторяющейся путанице.

char inputfilename[80], outputfilename[80];

Здесь вы также должны использовать std::string вместо массивов в стиле C произвольного размера.

while (infile.eof()==0) {

Это всегда ошибка , и прочтите эту связанную статью для получения дополнительной информации.

fprintf(outfile,"%d.  %s\n", text);

Опять же: fprintf также является библиотечной функцией C, которая абсолютно ничего не знает о классах C ++, таких как std::string и std::ofstream. В любом случае это ошибка, потому что эта строка имеет заполнители для двух параметров: целое число, %d и строка в стиле C, %s; и вы даете здесь только один параметр, text. Если бы вы писали C вместо кода C ++, это тоже не сработало бы, но это в основном академично. Это программа на C ++, и эта функция библиотеки C не имеет никакого отношения к делу, во-первых, здесь.

Когда вы читаете из std::ifstream:

  • Вы можете использовать std::getline, чтобы прочитать всю строку текста в std::string

  • [ 1130]

    В качестве альтернативы вы можете использовать отформатированный оператор извлечения >>

  • Или вы можете использовать различные методы объекта std::ifstream для чтения из файла и в подходящий буфер

Эти альтернативы не эквивалентны (иначе какой смысл?), И они делают разные вещи, и правильность выбора зависит от требований.

Аналогично, для записи в std::ofstream вы можете использовать:

  • Оператор форматированного вывода <<.

  • Различные методы самого объекта std::ofstream.

И в некоторых сложных ситуациях вы можете воспользоваться библиотекой итераторов, а также реализовать чтение и запись, используя итераторы ввода и вывода.

Правильный подход зависит от конкретной ситуации. Для получения дополнительной информации о том, как читать и писать из файлов в C ++ с использованием этих подходов, см. Любую хорошую книгу по C ++ . Какую бы книгу C ++ на самом деле ни советовали вам использовать fgets() для чтения из std::ifstream и в std::string: выбросьте ее и получите лучшую книгу из списка, указанного выше. Если это именно то, что вы нашли в какой-то программе в Интернете - вы не можете выучить C ++ таким образом, собрав воедино разные части разных программ, и надеясь, что результаты сработают. Чтобы исправить все ваши ошибки компиляции: удалите весь тот код C, который абсолютно ничего не знает о C ++, и замените его на надлежащий код C ++, используя любой из вариантов, которые я обрисовал в общих чертах выше, используя примеры из книг C ++, связанных выше, в качестве ссылки .

0
ответ дан Sam Varshavchik 18 March 2019 в 18:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: