Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
1 / 1 / 0
Регистрация: 15.12.2015
Сообщений: 31

Заполнение динамического массива данными из файла и отображение на экране

21.02.2016, 12:06. Показов 3222. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Стоит такая задача: Есть текстовый файл, необходимо считать данные из этого файла и вывести на экран.
Но содержимое текста необходимо вывести на экран следующим образом: строки более 80 символов - обрезать до 80, количество отображаемых строк на экране - 10. Кроме того, при нажатии клавиш "влево", "вправо" мы должны выводить на экран ранее обрезанные строки, а при нажатии "вверх" и "вниз" - отображать следующие 10 строк.

Пока что план у меня такой: создаётся динамический массив размером [кол-во строк] х [max длина строки] и в него заносится содержимое файла. Потом на экране отобразится часть массива 80 на 10 символов. Дальше через условие можно будет либо отображать остальной текст, либо прекратить работу (массив очищается).

Пока что дошёл до этого этапа:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <fstream>               
#include <string>          
#include <locale>   
using namespace std;
 
int main() {
    setlocale (LC_ALL, "rus");
    int Stolb=0;                                   
    int Strok=0;                                   
    int i,j;
 
    //--------Считаем столбцы и строки---------//
    //-----Для создания массива под текст------//
    ifstream inn("C:\\Users\\........\\Desktop\\test.txt"); 
    string a;
    while (!inn.eof()) {
    inn >> a;                     
    if (Stolb < a.size()) {
        Stolb = a.size();
    }   
    Strok++;
    }
    cout <<"Столбцов: "<< Stolb << " Строк: " << Strok << "\n";
    inn.clear();
    inn.seekg(0, ios_base::beg);
    
    //--------Выделение_памяти---------//
    char **mass;
    mass = new char*[Strok];
    for (i=0; i<Strok; i++) {
        mass[i] = new char[Stolb];
    }
    
    //--------Тут наш массив, заполняемый вручную----------//
    //С этого момента необходимо реализовать правило автоматического заполнения массива
    //данными из нашего файла.
    for (i=0; i<Strok; i++) {
        for (j=0; j<Stolb; j++) {
            cout << "Vvedite mass: ["<< i << "][" << j << "]: ";
            cin >> mass[i][j];
        }
    }
    
    //--------Вывод на экран--------//
    // А здесь массив, согласно правилу, должен отобразиться на экране.
    for (i=0; i < Strok; i++){ std::cout << "\n";
        for (j=0; j < Stolb; j++) { 
            cout << mass[i][j] << " " << endl;
        }
    }
 
// Также должен иметься код, отвечающий за дальнейшее отображение текста на экране, либо прекращение работы программы.
    
    //-------Очистка памяти---------//
    for(i=0; i<Strok; i++) 
    delete []mass[i];
    delete []mass;
    mass=NULL;
    return 0;
}
Вопрос: как написать правило отображение массива на экране, а также сделать привязку к клавишам, чтобы можно было отображать обрезанный тест?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2016, 12:06
Ответы с готовыми решениями:

Заполнение динамического массива структур из бинарного файла
Здравствуйте! Нужна помощь в реализации вот такого алгоритма: предположим, что изначально мы создали динамический массив структур и...

Заполнение динамического массива из файла, где в первой строке указан размер массива, а вторая строка содержит значения
Заполнение динамического массива из файла, где в первой строке указано какой размер n массива,а вторая строка содержит допустим 100...

Заполнение двумерного массива данными из файла
Здравствуйте. Возможна ли передача на динамический двумерный массив с 2-мя столбцами и с числом строк, идентичным числу строк таблице в...

3
5 / 5 / 1
Регистрация: 17.02.2016
Сообщений: 11
21.02.2016, 17:44
можно не создавать динамический массив, а использовать вектор строк. память для новых строк будет автоматически увеличиваться во время работы.
вот программа для вывода 10 строк по 80 символов. строки читаются из файла "file.txt".как сделать привязку к клавишам я не знаю.

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
40
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
void PrintStrWidth(std::string const &str, size_t width)
{
    std::string tmp = str;
    
    if ( tmp.size()>80 )
        tmp.resize(80);
    
    std::cout << tmp << '\n';
}
 
int main()
{
    std::fstream  file("file.txt");
    std::string  str;
    std::vector<std::string> strs;
    
    while ( std::getline(file, str) )
        strs.push_back(str);
        
    // строки более 80 символов - обрезать до 80, 
    // количество отображаемых строк на экране - 10
    if ( strs.size() <= 10 )
    {
        for (auto const &elem : strs)
            PrintStrWidth(elem, 80);
    }
    else
    {
        for (int i = 0; i < 10; i++)
            PrintStrWidth(strs[i], 80);
    }
    
    file.close();
    return 0;
}
Цитата Сообщение от trb4 Посмотреть сообщение
inn >> a;
тут у вас косяк, потому что читаются не целые строки, а отдельные слова и нельзя определить где заканчивается одна строка и начинается другая

Добавлено через 9 минут
у себя ошибку заметил
C++
1
2
3
4
5
6
7
8
9
void PrintStrWidth(std::string const &str, size_t width)
{
    std::string tmp = str;
    
    if ( tmp.size()>width )
        tmp.resize(width);
    
    std::cout << tmp << '\n';
}
0
1 / 1 / 0
Регистрация: 15.12.2015
Сообщений: 31
21.02.2016, 21:10  [ТС]
В 26 строке вашего кода появляется такая ошибка:
[Error] ISO C++ forbids declaration of 'elem' with no type [-fpermissive]
0
5 / 5 / 1
Регистрация: 17.02.2016
Сообщений: 11
23.02.2016, 15:54
В настройках компилятора поставьте галочку C++11
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.02.2016, 15:54
Помогаю со студенческими работами здесь

Заполнение двумерного статического массива данными из файла с разделителями
В файле text.txt есть строка 0:Ilya:20:Manager, как можно эту строку записать в двумерный динамический массив, где указателем было бы самое...

Чтение txt файла и заполнение массива данными из него
Доброго времени суток! Захотел написать метод, который будет считывать данные из файла и закидывать их в массив. В текстовом фале две...

Заполнение таблицы в шаблоне Word данными из динамического Access
Задача. (1) Имеем файл шаблона Word.dotx (2) Файл БД Access.mdb Кнопку на форме, которая ДОЛЖНА читать ВСЕ строки из (2) и...

Заполнение динамического массива
Добрый день! У меня проблемы с массивами. в столбце A есть значения &quot;Итого:&quot; в количестве 7-8 шт. Мне нужно записать в массив номер...

Заполнение динамического массива
Функция для записи и хранения имён текстовых файлов из папки (использование векторов (vector) запрещено, только массивы). После выполнения...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru