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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> пробелы, файл и char 
V
    Опции темы
jhonyxakep
Дата 23.2.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?

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



Неожиданно для себя столкнулся с проблемой: Необходимо из файла читать все символы(в тч пробелы переносы и тд) в char, посредством fstream, погуглил - ничего не нашел.
PM MAIL ICQ   Вверх
Ozerich
Дата 23.2.2010, 12:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

#include <fstream>
#include <iostream>

using namespace std;

ifstream fin("input.txt");

int main()
{
    char ch;
    while(fin.read(&ch,1) > 0)
        cout << ch;
    return 0;
}

--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP  Developer
PM MAIL ICQ Skype   Вверх
jhonyxakep
Дата 23.2.2010, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?

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



Ozerich, хорошо, а если ch должен быть unsigned char?

PM MAIL ICQ   Вверх
Ozerich
Дата 23.2.2010, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(jhonyxakep @ 23.2.2010,  11:37)
Ozerich, хорошо, а если ch должен быть unsigned char?

Ну тогда наверное никак.smile
А для чего тебе unsigned?  
--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP  Developer
PM MAIL ICQ Skype   Вверх
jhonyxakep
Дата 23.2.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?

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



Цитата(Ozerich @  23.2.2010,  12:59 Найти цитируемый пост)
А для чего тебе unsigned?

:( мне наги извлекать из него код символа, а обычный чар сначала принимает значения от 0..127 а потом -128..0
PM MAIL ICQ   Вверх
Ozerich
Дата 23.2.2010, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(jhonyxakep @ 23.2.2010,  12:06)
Цитата(Ozerich @  23.2.2010,  12:59 Найти цитируемый пост)
А для чего тебе unsigned?

:( мне наги извлекать из него код символа, а обычный чар сначала принимает значения от 0..127 а потом -128..0



Код


#include <fstream>
#include <iostream>

using namespace std;

ifstream fin("input.txt");

int main()
{
    char ch;
    unsigned char uch;
    while(fin.read(&ch,1) > 0)
    {
        if(ch >= 0)
            uch = ch;
        else
            uch = 128 + (128 - abs(ch));
        cout << int(uch) << endl;
    }
    return 0;
}



Это сообщение отредактировал(а) Ozerich - 23.2.2010, 13:20
--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP  Developer
PM MAIL ICQ Skype   Вверх
jhonyxakep
Дата 23.2.2010, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?

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





Ozerich, хе хе, так и думал сделатьsmile

Цитата(Ozerich @  23.2.2010,  13:19 Найти цитируемый пост)
cout << int(uch) << endl;


Может cout << (int)uch <<endl;?
PM MAIL ICQ   Вверх
Ozerich
Дата 23.2.2010, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(jhonyxakep @ 23.2.2010,  12:22)
Может cout << (int)uch <<endl;?

Пофиг. В вижле и так и так работает smile 
--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP  Developer
PM MAIL ICQ Skype   Вверх
Albor
Дата 23.2.2010, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Объясните, а почему первый вариант не годится для unsigned char?
Код

inline istream& istream::read(unsigned char * _ptr, int _n) { return read((char *) _ptr, _n); }
inline istream& istream::read(  signed char * _ptr, int _n) { return read((char *) _ptr, _n); }

разве результат не будет приведён к требуемому типу?
PM MAIL ICQ   Вверх
Ozerich
Дата 23.2.2010, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Albor @ 23.2.2010,  12:30)
Объясните, а почему первый вариант не годится для unsigned char?
Код

inline istream& istream::read(unsigned char * _ptr, int _n) { return read((char *) _ptr, _n); }
inline istream& istream::read(  signed char * _ptr, int _n) { return read((char *) _ptr, _n); }

разве результат не будет приведён к требуемому типу?

Цитата

cannot convert parameter 1 from 'unsigned char *' to 'char *'

--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP  Developer
PM MAIL ICQ Skype   Вверх
Albor
Дата 23.2.2010, 13:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Ozerich @  23.2.2010,  13:35 Найти цитируемый пост)
cannot convert parameter 1 from 'unsigned char *' to 'char *'

Такое не происходит если подключить fstream.h. Ну да ладно. Что мешает сделать так:
Код

while(fin.read((char*)&ch,1))

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

Это сообщение отредактировал(а) Albor - 23.2.2010, 14:11
PM MAIL ICQ   Вверх
Ozerich
Дата 23.2.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата
Такое не происходит если подключить fstream.h. 

Такого заголовочного файла VS 2008 не находит.
Цитата


 Что мешает сделать так:
Код

while(fin.read((char*)&ch,1))



А вот это работает smile 

--------------------
C++(STL) / DHTML(CSS) / Javascript / PHP  Developer
PM MAIL ICQ Skype   Вверх
Albor
Дата 23.2.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Ozerich @  23.2.2010,  14:17 Найти цитируемый пост)
Такого заголовочного файла VS 2008 не находит.

У меня 6я студия там есть. Ну, устарело так устарело smile.
PM MAIL ICQ   Вверх
bsa
Дата 24.2.2010, 14:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



вот извращенцы. istream::read нужен для чтения блоков информации. Какой смысл читать по 1 символу? Имхо, лучше уж тогда использовать istream::get():
Код

int r;
while( (r = fin.get()) >= 0)
   ch = static_cast<unsigned char>(r);

PM   Вверх
jhonyxakep
Дата 25.2.2010, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Divide Et Impera
**


Профиль
Группа: Участник
Сообщений: 983
Регистрация: 7.4.2009
Где: Что, Когда?

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



Цитата(Albor @  23.2.2010,  13:51 Найти цитируемый пост)
Такое не происходит если подключить fstream.h.

Ну во 1 это не правда, тк я как раз фстримом и пользуюсь.


Цитата(bsa @  24.2.2010,  14:11 Найти цитируемый пост)
вот извращенцы. istream::read нужен для чтения блоков информации. Какой смысл читать по 1 символу? Имхо, лучше уж тогда использовать istream::get():

 smile Ну извращенцы, так никто не противоречит, но в какой раз я убеждаюсь: чем извращеннее - тем лучше работает(в умеренной степени) smile


bsa, во 2, нужна была реализация как можно проще для пониманияsmile 

ЗЫ Все таки анализ BMP дело не легкое  smile 

Добавлено через 1 минуту и 11 секунд
Цитата(Ozerich @  23.2.2010,  13:24 Найти цитируемый пост)
Пофиг. В вижле и так и так работает  

А в MinGW нет:(

Добавлено через 2 минуты и 49 секунд
Цитата(Albor @  23.2.2010,  13:51 Найти цитируемый пост)
кстати, а чего бы не прочитать файл полностью в массив, а не по одному символу.

Из-за скорости, и требованиям к RAM, тк прога вообще для мафынки с 4 мб RAM smile 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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