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

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

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

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

04.10.2012, 22:39. Просмотров 1675. Ответов 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() передвигает курсор
Посмотрите здесь:

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

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

Курсор - C++
Подскажите как отключить курсор в консоли, чтобы не было видно

Курсор - C++
Как получить символ в определённой позиции курсора в консоле? Допустим по среди экрана выведено HELLO WORLD! и надо получить допустим...

Курсор - C++
Как получить координаты курсора в консоли

Курсор мыши - C++
Привет народ, помогите пожалуйста... У меня тут задача написать игру уголки(на шашечной доске) я для начало решил сделать его в...

Курсор и Изображени - C++
Пожалуйста помогите очень сложно.

невидимый курсор - C++
Помогите реализовать невидимый курсор в консоли (он постоянно мигает и мешает). В интернете порылся, но так ничего нормально, работающего...

мигающий курсор - C++
В CODEBLOCS в окне набора текста программы появился мигающий курсор &quot;_&quot;, а раньше был курсор &quot;|&quot;. И редактирование текста поменялось....

LOCATE курсор - C++
Здравствуйте. Подскажите, есть ли в С функция устанавливающая курсор в консольном приложении в заданную позицию?(аналогичная к LOCATE в...

нужно убрать курсор - C++
это ↓ не помогает убрать курсор, а в моей ситуации он никак не вписывается. помогите CONSOLE_CURSOR_INFO cci; cci.bVisible = 0; ...

Не получается перевести курсор - C++
Всем привет!Хочу отблагодарить всех,кто помог мне со строками.Спасибо. Но так как я школьник,то у меня появилась еще одна...


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

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

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