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

Странность работы функций [ifstream&] tellg() и seekg() на разных платформах - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Длинная арифметика)) http://www.cyberforum.ru/cpp-beginners/thread71952.html
Программка уже почти готова, единственное неправильно находит остаток при делении По заданию: Надо ввести 2-ва целых числа неогран. разрядности и произвести сложение, вычитание, умножение, деление. Помогите пожалуйста найти опечатку или ошибку из-за которой прога неправильно находит остаток при делении)))) Вот готовый код на С++: #include <stdio.h> #include <conio.h>
C++ Нужны исходники Народ ! Может есть у кого - нибудь исходники для этих задач ? Только надо на С !!! http://xmages.net/upload/b7b40688.png http://www.cyberforum.ru/cpp-beginners/thread71943.html
C++ Строки в файле.Очень надо!
Прошу помощи!!! Есть файл в нем 10 строк,нужно поочередно записать каждую строку в str, вроде как нужно это делать в цикле(но там ошибаюсь).после цикла я использую str в алгоритме и нужно чтобы программа юзала каждую строку поочередно.
Наследование классов. Используя базовый класс Point {x, y, цвет} разработать производные классы механизма двигателя. C++
Движок (двигатель с кривошипно-шатунным механизмом) Ребята, кто может, помогите очень надо! получу автоматом или пойду на экзамен, вот что решается. данные в файле. Надо изобразить движок и его движения. Надеюсь на вашу благосклонность!
C++ метод класса,как использовать его http://www.cyberforum.ru/cpp-beginners/thread71895.html
в классе есть функция как ее вызвать из главной функции?
C++ Очистка поля Edit control Как очистить поле Edit control в Visual C++ 6.0? Кидаю на форму Edit control и кнопку, для очистки Edit control. Поле Edit имеет следующие параметры: Type: CString Member: edit edit=""; - не помогает. Все, убейте эту тему, разобрался :D подробнее

Показать сообщение отдельно
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921

Странность работы функций [ifstream&] tellg() и seekg() на разных платформах - C++

08.12.2009, 20:04. Просмотров 3387. Ответов 0
Метки (Все метки)

В моей программе файл читается посимвольно и открывается на чтение в текстовом виде
C++
1
source.open(filename, ifstream::in);
Где-то в недрах программы используется такая конструкция:
C++
1
2
3
4
     unsigned long c = source.tellg();
     if (parser_GetToken() == TOKEN_COMMA) 
        error(CONST_REQUIRED);
     source.seekg(c);
Смысл которой прост: запомнить позицию указателя,заглянуть вперёд в файл,вернуться на исходную позицию.Строка,читающаяся на этот момент выглядит так:
PureBasic
1
LET mystring$ = STR$(34787868)
На момент ипользования функции tellg() указатель находится как раз на открывающейся скобке после слова "STR$" .Дело в том,что на Linux всё работает нормально,и "c" принимает значение 21,но если открыть файл в любом windows редакторе (включая в моём текстовом поле в GUI), и сохранить его,то тогда на обоих платформах "c" почему-то принимает значение 42. Мало того,возврат в ту же точку с помощью seekg() уже не возможен.Я уже в курсе,что windows добавляет в конец строки символ \r,но в этом случае тут что-то другое. Я спрашивал на IRC канале вчера,там один парень сделал тестовый пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <fstream>
#include <string>
#include <iostream>
 
using namespace std;
 
int main()
{
  ifstream in("source.bas");
  string s;
  for(int i=0; i != 10; ++i) {
    getline(in,s);
  }
  ifstream::pos_type p = in.tellg();
  getline(in,s);
  cout << "Read:" << s << '\n';
  {
    ifstream in2("source.bas");
    in2.seekg(p);
    getline(in2,s);
    cout << "Read:" << s << '\n';
  }
}
И он утверждал,что это работает по разному на разных компиляторах. И,что интересно,после включения флага ifstream::binary всё работало как надо,в чём я сегодня убедился.Хотелось бы узнать,почему так происходит,и что добавляет винда в строку,или может,дело в кодировке или ещё в чём-то? Просто хочется понять,и открывать текстовый файл в текстовом режиме,без "костылей".
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru