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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Как создать двумерный динамический массив http://www.cyberforum.ru/cpp-beginners/thread663789.html
Помогите, пожалуйста, в таком вопросе: нужно создать динамический двумерный массив. Да он еще должен быть такой, чтоб длина строк была разной, а элементы вводились не при инициализации, а уже при исполнении проги.
C++ Двумерный целочисленный массив Запускаю в vc++ 10. Жму F5:wall::-| В общем не компилируется, что делаеть? В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти число элементов массива, больших T (вводится с клавиатуры) и просуммировать эти элементы. #pragma hdrstop #include <conio.h> #include <iostream.h> #include <stdio.h> #include <stdlib.h> ... http://www.cyberforum.ru/cpp-beginners/thread663783.html
C++ думаю легкая задача, посмотрите
пожалуйста помогите !!!!!!!!! (((((( 1)Дан целочисленный массив В. Напечатать его левую и правую диагонали. 2)Дан вектор Х(а1,а2...аn)(n=100) упорядочить компоненты вектора так, чтобы сначала размещались все отрицательные компоненты, а затем положительные! Буду очень благодарна заранее
C++ short int и short
Какая разница, инициализирую я переменную как short int или же как short ? Вроде и тот, и тот тип данных компилятор понимает :)
C++ Заменить отрицательные элементы, расположенные ниже главной диагонали, на 0 http://www.cyberforum.ru/cpp-beginners/thread663767.html
Дана квадратная матрица А(N,N). Составить программу замены отрицательных элементов, расположенных ниже главной диагонали, на 0. Исходную и скорректированную матрицы напечатать.
C++ Напечатать его левую и правую диагонали массива Дан целочисленный массив В. Напечатать его левую и правую диагонали. help me pls! подробнее

Показать сообщение отдельно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.10.2012, 22:39     Метод peek() передвигает курсор
Столкнулся с такой вещью. Есть код, в котором происходит перемещение курсора по файлу и вывод позиции курсора перед считыванием 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() передвигает курсор  

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