Форум программистов, компьютерный форум CyberForum.ru

Метод peek() передвигает курсор - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.10.2012, 22:39     Метод peek() передвигает курсор #1
Столкнулся с такой вещью. Есть код, в котором происходит перемещение курсора по файлу и вывод позиции курсора перед считыванием peek() и после считывания.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
 
int main()
{
 fstream fin("1.txt", ios::in /*| ios::binary*/); 
 
 if (!fin.is_open()) cout << "Error!" << endl;
 
 char ch;
 int i = 0;
 while (true) 
 {
     i = fin.tellg(); // текущая позиция курсора
     cout <<  "i = " << setw(3) << right<< i << " "; // позиция курсора до peek()
     
     ch = fin.peek();  // символ в позиции курсора
     cout << "ch = " << setw(3)  << right << (int)ch << " ";
     
     i = fin.tellg(); 
     cout << "post peek() i = " << i << endl; // позиция курсора после peek()
     
     if (ch == -1) break;
     
     fin.seekg(1, ios::cur); // курсор на одну позицию вперёд     
 }
 
 cin.get();
 return 0;
}
В файле две строки:
aa aa
bb bb
В Windows. Если файл открыт в режиме обычного чтения, то Студия выдаёт такой результат (первый скрин). Курсор после считывания peek() остаётся на месте, пока не будет считан (второй раз) в 6 позиции символ с кодом 10. После этого считывания, курсор перемещается на одну позицию назад, поэтому происходит вход в бесконечный цикл.
В Code Blocks (mingv) картина другая (второй скрин). Тут курсор передвигается вперёд при каждом считывании peek(), пока не будет считан в 6 позиции (считывание в 5-ой пролетает, но если сделать, чтобы вывел, что там, то покажет 'a') символ с кодом 10. После этого курсор при считывании peek() остается на месте.
Если файл открыть в режиме бинарного чтения, то курсор при считывании peek() остаётся на месте (скрин третий и четвёртый).
В Linux курсор остаётся на месте и при обычном чтении, и при бинарном (скрин пятый и шестой).
Не понятно, почему peek() , вообще, передвигает курсор?
Миниатюры
Метод peek() передвигает курсор   Метод peek() передвигает курсор   Метод peek() передвигает курсор  

Метод peek() передвигает курсор   Метод peek() передвигает курсор   Метод peek() передвигает курсор  

Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2012, 22:39     Метод peek() передвигает курсор
Посмотрите здесь:

C++ Курсор
C++ Курсор
Курсор C++
Метод деления отрезка пополам для решения нелинейных уравнений (метод дихотомии) C++
C++ Метод медиан из трех элементов VS улучшенный быстрый метод сортировки(метод Бентли-Макилроя)
C++ Производный класс: метод возведения в произвольную степень, и метод для вычисления логарифма числа
Класс vector (поля: координаты, 2 конструктора, метод нахождения длины вектора и метод вывода координат на экран) C++
Нахождения корней уравнения: метод половинного деления (бисекции) или метод хорд C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.10.2012, 22:52  [ТС]     Метод peek() передвигает курсор #2
Удалил
Yandex
Объявления
04.10.2012, 22:52     Метод peek() передвигает курсор
Ответ Создать тему
Опции темы

Текущее время: 03:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru