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

Глюк с teelg - C++

Восстановить пароль Регистрация
 
 
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
01.07.2013, 15:56     Глюк с teelg #1
C++
1
2
3
int x1 = ifile.tellg();
ifile >>s; 
x1 = ifile.tellg();
сначала х1 = 1, потом идёт считывание символа f и далее х1 становится равным -14, как это понимать?

Добавлено через 16 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <fstream>
#include <string>
using namespace std;
 
 
int main()
{
    fstream ifile;
    string s;
    ifile.open("c:\\box2.obj", ios::in);
    int x1 = ifile.tellg();
    getline(ifile,s);
    x1 = ifile.tellg();
    ifile.close();
    return 0;
}
вот ещё пример считываемая строка весит больше 20 байт, но х1 выводит что смещение равно 9 как это понимать?

Добавлено через 2 минуты
я так понял это какой то баг?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2013, 15:56     Глюк с teelg
Посмотрите здесь:

глюк в программе C++
Глюк или ? C++
C++ Глюк GetWindowModuleFileName
Странный глюк с вектором C++
глюк с определениями C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.07.2013, 16:06     Глюк с teelg #2
Цитата Сообщение от Van111 Посмотреть сообщение
строка весит больше 20 байт, но х1 выводит что смещение равно 9
Что в файле box2.obj? И какой компилятор?
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
01.07.2013, 16:19  [ТС]     Глюк с teelg #3
Цитата Сообщение от Tulosba Посмотреть сообщение
Что в файле box2.obj? И какой компилятор?
описание 3д модели, компилятор MVS 2010, ошибку нашёл - надо было дописать в параметр открытия: ios::binary
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.07.2013, 16:40     Глюк с teelg #4
Van111, немного странно читать бинарный файл через getline()
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
02.07.2013, 13:14  [ТС]     Глюк с teelg #5
Цитата Сообщение от Tulosba Посмотреть сообщение
Van111, немного странно читать бинарный файл через getline()
файл не бинарный

Добавлено через 1 минуту
obj -это не тока объектный файл для линкёра, это и расширение 3Д модели http://ru.wikipedia.org/wiki/Obj
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.07.2013, 13:23     Глюк с teelg #6
Цитата Сообщение от Van111 Посмотреть сообщение
файл не бинарный
Тогда и ios::binary не нужен.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
02.07.2013, 15:25  [ТС]     Глюк с teelg #7
Цитата Сообщение от Tulosba Посмотреть сообщение
Тогда и ios::binary не нужен.
нужен для получения смещения
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.07.2013, 15:59     Глюк с teelg #8
Van111, почитайте тут
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.07.2013, 17:44     Глюк с teelg #9
Цитата Сообщение от Van111 Посмотреть сообщение
файл не бинарный
Все файлы бинарные. Это режимы работы с ними: текстовый, бинарный.
Tulosba
02.07.2013, 17:52
  #10

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Все файлы бинарные.
Только на бинарных компах

alsav22
02.07.2013, 18:40
  #11

Не по теме:

Все компы бинарные.

Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
02.07.2013, 21:56  [ТС]     Глюк с teelg #12
Цитата Сообщение от Tulosba Посмотреть сообщение
почитайте тут
не владею английским

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
Все файлы бинарные. Это режимы работы с ними: текстовый, бинарный.
я имел в виду что файл представлен в текстовом формате (то есть если на него взглянуть через блокнот можно понять что там написано)

Добавлено через 3 минуты
ios::binary - это не моя идея, мне её подсказал alsav22
перенос курсора
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
02.07.2013, 22:02  [ТС]     Глюк с teelg #13
для особо не верящих.
Миниатюры
Глюк с teelg   Глюк с teelg  
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
02.07.2013, 22:04  [ТС]     Глюк с teelg #14
код alsav22
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
34
35
36
37
38
39
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
using namespace std;
 
 
int main()
{ 
    char NameFile[26] = "calla_lily_with_roses.obj";
    
    fstream ifile;
    
    ifile.open(NameFile, ios::in | ios::binary);
    if (!ifile.is_open()) cout << "Error!" << endl;
    else
    {
        string temp;
         
        int n = 0;
        while (getline(ifile, temp))
        {
            if (temp[0] == 'f')
            {
                cout << temp << endl;
                char ch = ifile.get();
                cout << ch << endl;
                ifile.seekg(-1, ios::cur);
                getline(ifile, temp);
                cout << temp << endl;
                break;
            }
        }
        ifile.close();
    }
    
    system("pause");
    return 0;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.07.2013, 22:22     Глюк с teelg #15
Van111, Вы бы лучше свой obj-файл скинули.

Добавлено через 1 минуту
Цитата Сообщение от Van111 Посмотреть сообщение
не владею английским
Это зря. Суть в том, что проблема может быть с символами переноса строк. Под win должна быть пара \r\n, под unix - \n.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.07.2013, 22:29     Глюк с teelg #16
Цитата Сообщение от Van111 Посмотреть сообщение
код alsav22
И мои коментарии (по приведённой выше ссылке) к этому коду:
Всё работает, только непонятна цель. Вот код и результат на скрине. Делает, то что вы описали (зачем только так делать, непонятно):
Т.е. код сделан под описание ТС.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
02.07.2013, 22:31  [ТС]     Глюк с teelg #17
вот он (цветок в кувшине)
Вложения
Тип файла: rar calla_lily_with_roses2.rar (2.49 Мб, 8 просмотров)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.07.2013, 22:36     Глюк с teelg #18
Цитата Сообщение от Tulosba Посмотреть сообщение
Суть в том, что проблема может быть с символами переноса строк. Под win должна быть пара \r\n, под unix - \n
Там один '\n', поэтому при открытии блокнотом не видны строки, но getline() это нормально обработает.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.07.2013, 22:52     Глюк с teelg #19
А теперь конвертим в dos и смотрим результат. Без ios::binary разумеется.
Вложения
Тип файла: rar calla_lily_with_roses2_dos.rar (2.43 Мб, 3 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2013, 23:00     Глюк с teelg
Еще ссылки по теме:

Странный глюк с биндом C++
C++ Глюк gcc?
Странный глюк цикла while C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.07.2013, 23:00     Глюк с teelg #20
Посмотрели...Что сказать хотите?
Yandex
Объявления
02.07.2013, 23:00     Глюк с teelg
Ответ Создать тему
Опции темы

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