Чтение и запись в файл с++ используя класс fstream c++. Изучение С++ для начинающих. Урок
HTML-код
- Опубликовано: 4 дек 2017
- Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)
Работа с файлами с++. Запись в файл. c++ ofstream. Изучение С++ для начинающих. Урок #115
goo.gl/8VGmxk
Работа с файлами с++. Чтение из файла с++ ifstream. Изучение С++ для начинающих. Урок #116
goo.gl/bS83DL
Запись ОБЪЕКТА КЛАССА в файл с++. Чтение объекта из файла c++ Для начинающих. Урок #117
goo.gl/uvjHvo
Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут! =)
www.donationalerts.ru/r/simple...
или тут
/ simplecode
Уроки по программированию
Наша группа ВК smplcode
Подписывайтесь на канал / @simplecodeit
*Друзья, если вы решили изучать программирование и подписались на канал - рекомендую вам нажать колокольчик чтобы никогда не пропускать новые уроки!*
+13 человек на канал обеспечено
Поддерживаю просящих продолжить уроки по C++! Готов донатить!!!
Спасибо Вам за уроки, очень помогают, продолжайте в том же духе)
#работасфайлами #fstream #ofstream #ifstream #SimpleCode #урокипрограммирования
Сергей спасибо за очень интересный урок!
Сергей, я не знаю как ты это делаешь но ты единственный чьи уроки я с легкостью понимаю. Спасибо.
Один из лучших каналов. Огромное спасибо за уроки)
Пожалуйста!
Классно объясняешь: кратко, ясно и по делу.
Теперь я самый умный в группе. Спасибо больше, с радостью смотрю ваши уроки. Просто и понятно.
Спасибо за Урок!
Спасибо за видео, Серёга!
Спасибо урок, очень доступно для понимания
Спасибо за урок! Лайкос! Ща буду соображать как вводить строки с пробелами...
Спасибо за ваш труд!
Спасибо за видео.
Спасибо за бесценный труд!)
Очередное спасибо!
Спасибо бро за контент!
Большое вам спасибо за урок, очень помогли с школьным проектом, весь интернет перерыл, так и не нашёл тот самый параметр app, а у вас в видео всё сразу! Короче спасибо, с меня лайк)
Сергей, спасибо!
для функции system есть команда chcp 1251 дающая возможность верно работать консоли с русским алфавитом без всяких левых библиотек, а еще есть оператор switch для удобства работы с выборкой
Давным давно мучился с русскими буквами и тут готовое решение! Спасибо
спасибо огромное!!!
Спасибо!!
Огромное спасибо !)
Спасибо за урок!
😆 у меня весь код на С++, пока не нашёл канал Сергея, тоже состоял из "Моих любимых крокозябр"
Ещё раз напишу, видео очень нравятся!
Спасибо большое!
Отличненько!
Спасибо !!!😊😊
Очередное спасибо за урок.
Благодарю!
В принципе я проблему уже решил, но интересно было бы увидеть вашу реализацию. Проблема такая: как организовать поиск в файле, с выводом нужной строчки? Т.е., например, мы записываем в файл номер, имя и зп работников. Например в таком виде:
12 Андрей 3000р
15 Олег 2000р
и т.д. Нам нужно чтобы пользователь ввел номер конкретного работника, а ему вывелась вся информация (имя и зп этого конкретного работника).
Лешков Владислав расскажи как решил
Если кратко, то во время записи в файл, после ввода номера сотрудника, записываем '\0'. (fout
Лешков Владислав ну в принципе нормально. Спасибо
@@KurpatovInstagram А если зп будет 1500 и идентификатор будет другой? А мы как раз ищем 15, тогда компилятор нам эту строку и выведет. Он ведь место не учитывает.
Если вы захотите записывать сообщение с пробелами используя после cin... getline(cin, ...), перед getline(cin,...) очистите буфер cin.ignore(); иначе у вас первая строчка не будет записываться
Сергей, а что бы вы посоветовали насчет работы с директориями? Есть в fstream просмотр/удаление/переименование, или же пользоваться унаследованными от С?
Спасибо
Организовать файл записей PRICE, содержащих следующие поля: название товара, название магазина, в котором продаётся товар, стоимость товара в гривнах. Написать программу, выполняющую следующие действия:
Ввод с клавиатуры данных о нескольких товарах, вывод на экран информации о товаре, название которого введено с клавиатуры, если таких товаров нет, выдать соответствующее сообщение.
спасибо
Полезное видео, автору лайк!
Подскажите, при классе fstream можно ли сделать, чтобы при отсутствии файла он не создавал новый?
+100500 лайков)
Здравствуйте!
Страниц 50 в интернете просмотрел, так и не понял, как с помощью getline (или другой функции) ввести строку с пробелами в файл.
Помогите, пожалуйста.
спасибо за уроки!
не подскажешь, как передать файл в функцию, например ф-ция создания файла.
Хочу отметить, что на Linux'e не нужно менять кодировку консоли для нормального отображения кириллицы. Чтение и запись текстовых файлов в кодировке UTF-8 работает безо всяких преобразований, а напрямую. На Windows дичайшие проблемы с этим!!
А под Линукс VisualStudio ставися??
@@TheWladberlin увы((
А будете говорить о сортировке масивов?
Уже третий день пытаюсь подружить стандартные инструменты C++ с UTF-8, хотя бы банально заставить его понимать UTF-8 символы до лимита wchar_t в 65536, сколько это там, хз, обычный char = 256 (255, если учитывать ноль), это скорее всего значит, что он может понимать код символа до 255, не более. Обычные ASCII-8bit таблицы столько и имеют.
Но Unicode... Для него даже 65536 недостаточно, там ~1 миллион (больше) символов
P.S. Точнее символы разбросаны до диапазана в примерно миллион кодов, так там в юникоде около ~150к символов
Всё, научился делать так, чтобы консольное приложение могло создавать UTF-8 файл и нормально записывать в него текст, так же открывать UTF-8 и выводить из него текст в окно консоли. Но всё же пара нюансов осталась. На виндовс, поддерживаются не абсолютно все языки, а так же не поддерживаються emoji.
Возможно на запись в файл и доступно всё, но не на отображение в окне консоли.
На стандартном шрифте "Consolas", спокойно одновременно могут отображаться все буквы из данных языков:
Hello, World! - English
Привет, мир! - Russian
Привіт, Світ! - Ukrainian
Сәлем Әлем! - Kazakh
Салом Ҷаҳон! - Tajik
Բարեւ Աշխարհ! - Armenian
Witaj, Świecie! - Polish
¡Hola, Mundo! - Spanish
И многих других, основанных на латинице и кириллице
Если поменять шрифт на SimSun-ExtB, будет гораздо больше, + Японский, корейский и ещё некоторые.
Если кому понадобится, кодом поделюсь.
6:52 а было бы не лишним посмотреть простенькое меню в вашем исполнении. Потому как в пройденных темах полноценных обзоров полезных функций, часто используемых библиотек, так и не было. =(
Лайк
Еще бы хотелось бы увидеть пример работы с текстовым файлом не только с кракозябрами, но также и с обычным читабельным.
Для того, чтобы не менять каждый раз кодировку консоли....и не использовать setlocale.....есть шикарная команда для виндовс system("chcp 1251 > 0"); работает и на ввод и на вывод данных....понимает и кирилицу и латиницу
change code page значит
Ну да, тоже читал где-то, что это те же самые
SetConsoleCP и SetConsoleOutputCP
только в одном флаконе
thx
Можно ли всегда использовать getline? Еще когда начал записывать строки, одну за другой, столкнулся с проблемой, как я пронял заполнения потока cin. Какая функция, на ваш взгляд была бы подходящая для очистки потока. Я, погуглив нашел #inlude int istream::sync();
cin.ignore()
С украинскими символами происходит ошибка при печатании буквы "i". На одном из сайтов я нашел решение этой проблемы
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
ну и конечно же подключение #include "windows.h" . При таких установках нет необходимости при обратном выводе на консоль преобразовывать вывод в кодировку 866. Главное в свойствах консоли установить не точечные шрифты а, например Consolas.
Видеоуроки хорошие, спасибо за них, но как с файла выдалить данные?
10в степене безконечности лайков
Доброго времени суток, не подскажите а как скажем удалить или перезаписать запись с определенной строки ?
while(true)
{
cout
#include
#include
#include
#include
#include
using namespace std;
int key = 0;
bool stop;
int menu();
void Write_Reed();
int main()
{
setlocale(LC_ALL,"ru");
while (!stop)
{
menu();
Write_Reed();
}
cout
спасибо!!
Здравствуйте, а можете ли вы скинуть условия этой задачи?
Сергей привет во первых огромное спасибо за отличные уроки. И задам вопрос по с# если ты конечно в таком же совершенстве его знаешь как с++, как считать файл txt построчно в режиме реального времени или потоками или асинхронно. Заранее спасибо.
У него есть уроки по шарпу, вопрос там надо задавать
Спасибо) Сергей можете зделать хотья б однин урок об многопоточности.Чтобы понять принцип действия?)
Здравствуйте!А как отсортировать информацию с данного файла,если я для записи в файл использовал for??
for (int i = 0; i < 5; i++)
{
SetConsoleCP(1251);
cin >> msg;
fs
system ("chcp 1251"); Вроде проще? Все правильно работает, не?
Ребятушки, может, кто то знает, как быть с вводом на русском на маке? какую то другую библиотеку подключать?
Сергей Спасибо за урок ! Но тут такая проблема вроде все сделал как на уроке вы показывали , но при нажатии два считывается только одно сообщение.. А я их написал уже 10
Все исправил , проблема была что в цикл while напихал лишнего , привык просто работать с for .
В 2019 Visual Studio не работает SetConsoleCP() используйте system("chcp 1251");
У меня даже так не работает. Пишет "указана недопустимая страница кодировки"
Здравствуйте!Вот у меня такая проблема...После установки Visual Studio,я первым делом создал тестовый проект...После на след.день,я не смог зайти не в мой "тестовый проект"Не создать новый...Вылезла ошибка-
Не удалось прочесть файл проекта-
---------------------------
Microsoft Visual Studio
---------------------------
Не удалось прочесть файл проекта ConsoleApplication9.vcxproj.
C:\Users\User\source
epos\ConsoleApplication9\ConsoleApplication9\ConsoleApplication9.vcxproj(58,5): не удалось загрузить импортированный файл проекта "C:\Users\User\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props". Отсутствует корневой элемент.
По моему я единственный в комментариях, кто помнит давний урок про оператор "Switch". Реально, почему нельзя было использовать его? Зачем делать через ифы?
Кому как, If тупо привычнее. Но к switch нужно default прописать, это в контексте видеоролика минус.
Я тут застрял чутка. Допустим у меня есть три переменные и их сумма. Как записать в файл чисто переменную result? Ну и вообще как записывать переменные а не вводить?
у меня почему-то не работает fs.open(path, fstream::in | fstream::out | fstream::app);
библиотеку подключил?
@недорыжий кот думаю в этом у него и был подвох, поэтому не отписал)
@halfRedCat а писал вообще под водой
@halfRedCat а деняк нема, вот и в уме писал дальше код
@halfRedCat ок, а зачем мне эта инфа?
ну с 1 словом ввод понятен, а как вводить словосочетания или предложения? по такому вводу в файл сохраняется только первое слово
Через getline
@@glebko732 не работает
Разобрался с проблемой.
Сразу после того, как мы ввели value, нужно добавить
cin.ignore(32767, '
');
Цитирую сайт ravesli:
"...Оказывается, когда вы вводите числовое значение, поток cin захватывает вместе с вашим числом и символ новой строки. Так что, когда мы ввели 2, cin фактически получил 2
. Затем он извлёк значение 2 в переменную, оставляя
(символ новой строки) во входном потоке. Затем, когда std::getline() извлекает данные для myName, он видит в потоке
и думает, что мы, должно быть, ввели просто пустую строку!
Хорошей практикой считается удалять из входного потока данных символ новой строки. Это можно сделать следующим образом:
std::cin.ignore(32767, '
');
Если мы вставим эту строчку непосредственно после получения входных данных, то символ новой строки будет удален из входного потока, и программа будет работать должным образом."
@@michaelmyers9413 интересное решение, нужно будет попробовать cin.ignore() без параметров, я этот способ очистки потока ввода использовал когда совмещал cin для получения int переменной и gets_s для строк в одной проге недавно.
@@mykolahureiev6466
А у Праты в книге написано, что достаточно просто дописать cin.get(); (отбрасывает символ новой строки)
Но я не проверял.
А как, допустим, создать функцию для чтения из файла? Когда такая функция вызывается второй раз, то eof() не сбрасывает свое значение, как будто курсор находится в конце файла. Пробовал не добавлять fstream::app, но толку нет
Файл закрывали?
@@fillmalyshev9377 да
У меня почему-то когда ввожу цифру 1 и набираю сообщение больше 1 слова в файл записывается только первое слово.
Слушай внимательнее, все что после пробела затирается
Здравствуй!! У меня вопрос появился, а как присвоить значение TXT переменной int?? Очень важно Я не могу понять(
Не знаю как напрямую, возможно ответ уже найден.
Но есть функции перевода строки в численные:
atoi(); - to int
atof(); - to float
atod(); - to double
0 дизлайков это достижение)
Спасибо. А я вот записываю строку, но считывает только первое слово. Почему? Может кто ответит? Заранее спасибо.
вы поняли в чём проблема?
@@denyssalvatore9518 единственный вариант который я нашел, это для ввода использовать ofstream, тогда getline работает, если пытаться вставить getline в fstream::out то ничего не происходит
@@mykolahureiev6466 я тоже весь измучился, думал, только я не догоняю))
@@mykolahureiev6466
Если убрать менюшку, все работает. Не понимаю, с чем это связано и почему с менюшкой перестает работать
Разобрался с проблемой.
Сразу после того, как мы ввели value, нужно добавить
cin.ignore(32767, '
');
Цитирую сайт ravesli:
"...Оказывается, когда вы вводите числовое значение, поток cin захватывает вместе с вашим числом и символ новой строки. Так что, когда мы ввели 2, cin фактически получил 2
. Затем он извлёк значение 2 в переменную, оставляя
(символ новой строки) во входном потоке. Затем, когда std::getline() извлекает данные для myName, он видит в потоке
и думает, что мы, должно быть, ввели просто пустую строку!
Хорошей практикой считается удалять из входного потока данных символ новой строки. Это можно сделать следующим образом:
std::cin.ignore(32767, '
');
Если мы вставим эту строчку непосредственно после получения входных данных, то символ новой строки будет удален из входного потока, и программа будет работать должным образом."
up
Товарищи, скажите, а зачем мы явно указываем пространство имен в аргументах экземпляра класса fstream? Может я чего пропустил, но раньше мы просто писали например (path, app). Это связано с битовым ИЛИ?
in чтобы ты мог ввести текст, а out для выводы того что ты ввёл
Как я понимаю, in, out и app - поля, которые находятся в public секции класса fstream; поэтому доступ из main к ним есть, однако надо указать пространство имён, ведь это не глобальные переменные, а поля класса.
НЕ ПОНЯТНО ЧТО ГОВОРИТЕ НА 10:34, КАК ДОЛЖНА КОНСОЛЬ РАЗБИРАТЬ СИМВОЛЫ?
Он говорит: setlocale(LC_ALL, "rus") - не помогает, потому что... И .т.д.
когда я засунул это в цикл вайл оно перестало работать
Вывод из файла не получился, хоть и написал код один в один
Решение проблемы:"передать больше чем 1 слово через пробел"
#include
#include
#include
#include
using namespace std;
#define BUFF_SIZE 1024
setlocale(LC_ALL, "RU");
int y = ::MessageBox(NULL, L"Вы хотите продолжить?
", L"Программа, которая работает с файлом.", MB_YESNO | MB_ICONINFORMATION);
if (y == 6)
{
char count;
string str;
bool bExit = false;
while (!bExit)
{
cout
Уже немного скучновато. Но познавательно. Хотелось бы уже создавать реальные настольные приложения. Пускай, обычный блокнот, где можно ввести текст и сохранить его в файл. Хотя бы это, но практика, которую можно где то применить. А то на теории далеко не уедешь.
что вам мешает, имея базу теории в 118 уроков и гугл, самому придумать и создать/скопировать чье-то приложение?
Лешков Владислав как? Нафиг мне консольные приложения в командной строке? Я хочу, чтобы программа выглядела красиво, с интерфейсом. А как это сделать? Как раз таки базу теории можно почитать в гугле, а практику попробуй найти. 118 уроков ни о чем, можно было просто книгу почитать по основам c++
Лично мне эти уроки очень помогают. Так что с тем, что они "ни о чем" категорически не согласен. А создать своё приложение с красивыми кнопочками и интерфейсом можно и на С#. Совместить его с С++. На эту тему тоже есть видео. Было бы желание
Лешков Владислав можно ссылку на видео?
Эй, это азы с++. Без них ты не создашь НИ ЧЕ ГО. В будущем он будем нам показывать OpenGL, и тогда уже будет графика, анимация, и игры, а это основы.
Ты ещё не готов к играм, тебе ещё далеко до OpenGL, ты же не хочешь просто скопировать какой-то скрипт из хабрахабра, и дальше не знать, чё делать? Ты может хочешь научится самостоятельно делать игры, без копирования чужого?
Спасибо за видео.
спасибо
спасибо