Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считать из файла, лишний символ 
:(
    Опции темы
OPQ
Дата 16.4.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 31.7.2006

Репутация: нет
Всего: нет



В файле test.txt записано: qwerty
я его считываю и получаю qwertyy

делаю так
Код

char ch;
    ifstream intxtfile("test.txt");
    while(intxtfile)
    {
        intxtfile.get(ch);
        cout<<ch;
    }


Подскажите где я ошибся.
PM MAIL   Вверх
fantast
Дата 16.4.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

Репутация: 2
Всего: 2



Цитата(OPQ @  16.4.2007,  14:39 Найти цитируемый пост)
while(intxtfile)

такая запись означает что цикл будет продолжаться до тех пор пока биты ошибок пусты, т.е. ошибок пока не происходило.
когда ты считываешь последний символ и оказываешься в конце файла, то ошибок все еще не было, поэтому цикл повторяется еще раз и в нем ты пытаешься считать символ из файла, это у тебя не удается (получается ошибка), и ты выводишь содержимое ch которое соответственно не изменилось, и только после этого твоя запись while(intxtfile) позволит тебе выйти из цикла. тут тебе лучше использовать eof().
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
OPQ
Дата 16.4.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 31.7.2006

Репутация: нет
Всего: нет



fantast,  всё равно тоже самое
Код

while(!intxtfile.eof())
{
    intxtfile.get(ch);
    cout<<ch;
}

PM MAIL   Вверх
JAnty
  Дата 16.4.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 6.12.2004
Где: Москва

Репутация: 1
Всего: 2



fantast логично сказано, кончно надо ловить eof.


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
Anikmar
Дата 16.4.2007, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Предположение:
Помню под ДОС текстовые файлы заканчивались симолом ^Z.
А как сейчас даже не знаю. Может он его хавает? Или там пустая строка есть...
PM MAIL ICQ   Вверх
JAnty
  Дата 16.4.2007, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 6.12.2004
Где: Москва

Репутация: 1
Всего: 2



Цитата(OPQ @  16.4.2007,  14:54 Найти цитируемый пост)
fantast,  всё равно тоже самое


Чисай Сишными методами и всё будет ОКеюшки... smile 


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
OPQ
Дата 16.4.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 31.7.2006

Репутация: нет
Всего: нет



Anikmar, пустой строки нет
PM MAIL   Вверх
JAnty
  Дата 16.4.2007, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 6.12.2004
Где: Москва

Репутация: 1
Всего: 2



Символ конца строки равен 255. Но это не главное.

Читай fscanf'ом

Это сообщение отредактировал(а) JAnty - 16.4.2007, 15:06


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
OPQ
Дата 16.4.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 31.7.2006

Репутация: нет
Всего: нет



Цитата(JAnty @  16.4.2007,  14:59 Найти цитируемый пост)
Чисай Сишными методами и всё будет ОКеюшки...   

пример можно, а то я не знаю как. Но лучше всёже при помощи потоков...
PM MAIL   Вверх
fantast
Дата 16.4.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

Репутация: 2
Всего: 2



черт попутал, в ошибочных битах тож есть бит eof, так что должно было работать..
а выложи всю программу
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
OPQ
Дата 16.4.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 31.7.2006

Репутация: нет
Всего: нет



fantast, 
Код

#include <iostream>
#include <fstream>
#include <conio.h>

using namespace std;
int main()
{
    
    char ch;
    ifstream intxtfile("test.txt");
    
    while(intxtfile)
    {
        intxtfile.get(ch);
        cout<<ch;
    }
    cout<<'\n';
    while (!_getch()); 


    return 0;
}

PM MAIL   Вверх
vinter
Дата 16.4.2007, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Код

 while(!intxtfile.eof())
    {
        intxtfile.get(ch);
        cout<<ch;
    }

если компилятор от горячо любимого борланда, то косяк все равно может остаться.


--------------------
Мой блог
PM MAIL WWW   Вверх
fantast
Дата 16.4.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

Репутация: 2
Всего: 2



переделай свой txt файл, мот ты там какой пробел поставил после цифр или еще что..
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
OPQ
Дата 16.4.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 31.7.2006

Репутация: нет
Всего: нет



vinter,делал я так smile 

Цитата(vinter @  16.4.2007,  15:15 Найти цитируемый пост)
если компилятор от горячо любимого борланда, то косяк все равно может остаться. 

VC++ 2005, VC++ 2002
PM MAIL   Вверх
dumb
Дата 16.4.2007, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Цитата(vinter @  16.4.2007,  15:15 Найти цитируемый пост)
если компилятор от горячо любимого борланда, то косяк все равно может остаться

горячо любимый борланд тут не причем. состояние потока нужно проверять после чтения, а не где удобней.
либо:
Код

    while(intxtfile >> ch)
    {
        cout<<ch;
    }


либо:
Код

        if (intxtfile.get(ch))
          cout<<ch;

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.