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

консоль - C++

Восстановить пароль Регистрация
 
Qiker
 Аватар для Qiker
7 / 7 / 0
Регистрация: 08.04.2010
Сообщений: 56
07.05.2011, 12:04     консоль #1
Есть файл с данными (большой текст, около 300 строк),
когда считываю данные оттуда и вывожу их на экран(в консоли) часть данных теряется
(начиная с заголовка и примерно одно окно консоли).

как избежать потери данных?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2011, 12:04     консоль
Посмотрите здесь:

Консоль C++
Консоль C++
Консоль C++
Консоль C++
Консоль C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
07.05.2011, 12:11     консоль #2
Без кода сложно сказать, но скорее всего дело в том, что ф-ции вывода буферезируют вывод. Попробуй периодически очищать буфер, fflush() в помощь.
Qiker
 Аватар для Qiker
7 / 7 / 0
Регистрация: 08.04.2010
Сообщений: 56
07.05.2011, 12:20  [ТС]     консоль #3
это с помощью fflush(stdin);
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
07.05.2011, 12:22     консоль #4
Нужно же буфер вывода очистить, так что fflush( stdout);
Qiker
 Аватар для Qiker
7 / 7 / 0
Регистрация: 08.04.2010
Сообщений: 56
07.05.2011, 12:27  [ТС]     консоль #5
не помогает
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
07.05.2011, 12:28     консоль #6
Вообще-то проблема не совсем понятна, может нужно буфер консоли увеличить, чтоб весь текст влазил. Тут уже API нужно использовать.
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
07.05.2011, 12:29     консоль #7
Попробуйте увеличить входной буфер.
Дайте код. Без него трудно разобраться...
Qiker
 Аватар для Qiker
7 / 7 / 0
Регистрация: 08.04.2010
Сообщений: 56
07.05.2011, 12:41  [ТС]     консоль #8
Это часть кода:

C
1
2
3
4
5
6
7
8
9
10
11
save=fopen(way,"r");
        if (save == NULL) {perror("Ошибка при открытии файла");}
        else
        while (fscanf(save,"%c",&c)!=EOF) {
                        count++;
                        text=(char*)realloc(text,count*sizeof(char));
                        if (text==NULL) {
                        perror("         Ошибка при вводе");}
                        text[count-1]=c;
                        fflush(stdout);
                        }
Если нужно объясню как я выделял память под данные(хотя Вы поймете)
как увеличить буфер?

Добавлено через 4 минуты
а вот еще
C
1
2
int count=0;
char *text=NULL;
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
07.05.2011, 12:53     консоль #9
Цитата Сообщение от Qiker Посмотреть сообщение
1

int count=0;
while (fscanf(save,"%c",&c)!=EOF) {
count++;
text=(char*)realloc(text,count*sizeof(char));
}
Смотрите: у вас в первой итерации цикла выделяется 1 байт, во второй выделяется 2 байта, в третей - 3 байта и т.д. и т.п.
Как тут не избежать потери данных??
Qiker
 Аватар для Qiker
7 / 7 / 0
Регистрация: 08.04.2010
Сообщений: 56
07.05.2011, 13:07  [ТС]     консоль #10
а как избежать потери данных? может быть использовать двумерный массив?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2011, 13:46     консоль
Еще ссылки по теме:

C++ консоль
C++ Консоль и C++
Консоль C++

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

Или воспользуйтесь поиском по форуму:
prZzZ
Программист
 Аватар для prZzZ
108 / 88 / 5
Регистрация: 22.03.2011
Сообщений: 232
07.05.2011, 13:46     консоль #11
Я бы на вашем месте сделал бы так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
HANDLE hFile, hFileMapping;
LPVOID buf;
hFile = CreateFile(...);
if(hFile != INVALID_HANDLE_VALUE)
{
    hFileMapping = CreateFileMapping(hFile,...)
    if(hFileMapping)
    {
        buf = MapViewOfFile(hFileMapping,...);
       // Здесь мы делаем всё, что захотим...:)
       //....
       UnmapViewOfFile(buf);
       CloseHandle(hFileMapping);
    }
    CloseHandle(hFile);
}
Добавлено через 1 минуту
А по байтам читать - это не серьёзно и не продуктивно...
Yandex
Объявления
07.05.2011, 13:46     консоль
Ответ Создать тему
Опции темы

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