Может ли кто-нибудь объяснить, как c++ читает файлы? Я не прошу код читать в файле, но после переменной ifstream >>, каковы правила, как c++ захватывает данные?
Является ли файл таким, как чтение cin в пользовательском вводе? означает, что он останавливается после каждого пробела? Что происходит после того, как оно достигает конца строки? автоматически ли оно переходит к следующей строке или мне нужно написать код для этого? Я знаю, что он останавливается после eof, но я не уверен в процессе извлечения данных, и я не могу писать код, если я не понимаю этот процесс. благодаря
Да, оператор ввода >>
всегда "токенизирует" (останавливается) в пробеле. И чтение из любого входного потока работает одинаково.
За очень хорошую информацию я предлагаю эту ссылку. Особенно эта ссылка для оператора ввода очень подробно.
Операторы ввода и вывода формата iostream по существу определяются в терминах функций библиотеки C strtol
/strtoul
/strtod
(см. 22.4.2.1.2) и sprintf
(см. 22.4.2.2.2) соответственно.
В основном, когда вы вызываете ifstream f;
, вы создаете переменную с доступом к библиотеке. Оттуда вы должны объявить свои намерения этой переменной. Использование f.open(fileName, ios::in);
вы можете ввести имя_файла с помощью оператора >>
, который фактически работает как cin
. Он останавливается в белых местах, как и следовало ожидать. Как только он достигает конца строки, он продолжается до тех пор, пока у вас есть код, который просит оператора извлечь больше. Вам не нужно ничего делать, чтобы сказать, чтобы перейти к следующей строке.
В C/C++, как правило, нет никакой разницы во входном потоке (кроме деталей, например: поиск).
Имея C++, есть два выдающихся способа ввода:
Все форматированные операции ввода включают операторный stream& operator >> (stream&, T)
. Однако не все stream& operator >> (stream&, T)
выполняют форматированный вход (например, некоторые включают манипуляторы или буфер потока)
Каждый форматированный ввод начинается с пропусков пробелов и останавливается при первом символе, не являющемся частью входного формата (Примечание. Это может быть любой символ, он не ограничен пробелами).
Неформатированный ввод считывает все символы (не игнорирует пробел) и останавливается, если запрашивается количество символов, или поток достигает конца (EOF). Специализированные функции (например, std :: getline) могут останавливаться на раннем этапе и игнорировать символ условия разграничения.