Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
#1

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

04.10.2012, 22:39. Просмотров 2046. Ответов 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() , вообще, передвигает курсор?
0
Миниатюры
Метод peek() передвигает курсор   Метод peek() передвигает курсор   Метод peek() передвигает курсор  

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2012, 22:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Метод peek() передвигает курсор (C++):

Обьясните работу peek(); - C++
Есть строчка в файле 5 The Early English Text Society Мне нужно достать число и сравнить с числом из другого файла. ...

Неудачная попытка понять как работает функция peek() - C++
Чтобы понять принцип работы функции peek(), написал простенькую программку. Но даже она не работает. #include &lt;iostream&gt; using...

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя - C++
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Метод медиан из трех элементов VS улучшенный быстрый метод сортировки(метод Бентли-Макилроя) - C++
Здравствуйте! Дали весьма интересное задание. Сравнить два вышеуказанных метода сортировки для массива из 10000 элементов, результаты...

Мой код - метод бисекции, метод секущих (метод хорд) - C++
Всем привет!!! Изучаем в институте С++. Сделал код, и там, и там одна и та же проблема - при любых вбиваемых значениях программа делает...

Метод Peek() класс TextReader - C#
В msdn сказано: &quot;Целое число, представляющее следующий символ, чтение которого необходимо выполнить, или значение -1, если доступных...

1
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.10.2012, 22:52  [ТС] #2
Удалил
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2012, 22:52
Привет! Вот еще темы с ответами:

Написать программу которая передвигает символ - Assembler
Написать программу которая передвигает символ, под управлением &quot;стрелок&quot;

Почему маргин заголовка передвигает фоновую картинку родительского элемента? - HTML, CSS
Почему такое происходит? &lt;div id=&quot;home&quot;&gt; &lt;div class=&quot;container&quot;&gt; &lt;h1&gt;we create design that you will love&lt;/h1&gt; &lt;button...

DEF SEG и PEEK - QBasic
Что это за формулы? SCREEN 11 DO K$ = INKEY$ IF K$ = &quot;F&quot; THEN A% = A% +1 DEF SEG = A% B% = PEEK(1) PRINT B% LOOP формула...

Некорректная работа Aero Peek - Windows 7
Совсем недавно аеро пик работал нормально , всегда можно было посмотреть другое окно не переключаясь. Недавно отдавал ноут на чистку и...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru