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

Как прочесть несколько слов из файла в динамический массив char и добавить новое значение в конец?

09.09.2016, 17:25. Показов 1618. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Никак не могу разобраться.

Есть текстовый файл в виде:

3
Mop floor
Clean windows
Mow lawn

цифра 3 это количесво записи что находится в файле;

основываясь на этой цифре надо создать динамический массив в количестве вдвое превышающий эту цифру
нужно прочесть файл в динамический массив из char и добавить новое значение в конец,

из всего сделанного мною только это, а дальше никак не смог сообразить как быть

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <cstring>
#include <fstream>
#include <stdlib.h>
 
using namespace std;
 
void addItem(char **chores, int &maxRecord, int x);
 
 
int main()
{
    int x;
    int record;
    int optionToChoose;
 
    char txtFile[20];
 
    //promting the user to type the name of the file
    cout<<"Please enter the filename to open: ";
    cin.getline(txtFile,20);
 
    strcat(txtFile,".txt");
 
    //reading the file
    ifstream inFile;
    inFile.open(txtFile);
 
    //in case of error while reading the file
    if(inFile.fail())
    {
        cout<<"Cannot open the file!"<<endl;
        exit(1);
    }
 
    inFile>>record;
    cout<<record<<endl;
    inFile.ignore(100,'\n');
 
    int maxSize_line=50;
    int maxRecord= record*2;
 
    char newItem[maxSize_line];
 
    char **chores= new char*[maxRecord];
 
    for(int i=0; i<maxRecord; i++)
    {
 
        chores[i]= new char[maxSize_line];//dlina
 
         inFile.getline(chores[i],maxSize_line,'\n');
         cout<<*(chores+i)<<endl;
 
    }
 
addItem(chores, maxRecord,x);
 
}
 
// и тут все у меня неправильно выходит
void addItem(char **chores, int &maxRecord, int x)
{
 
    char *temp= new char[maxRecord];
 
    for(int i=0; i<maxRecord;i++)
        temp[i]=(*chores)[i];// adding new records
        delete[](*chores);// clearing array
    *chores= new char[maxRecord+1];// making new memory for array
 
    for(int i=0; i<maxRecord; i++)
    (*chores)[i]= temp[i];
 
    (*chores)[maxRecord-1]=x;
 
    maxRecord++;
 
    delete [] temp;


Просто я не уверен что это работает правильно,ввиду моего малого опыта. Надеюсь на вашу помощь и подсказку.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.09.2016, 17:25
Ответы с готовыми решениями:

Как добавить новое значение в одномерный динамический массив?
При создании динамического массива и добавления нового значение, значение куда-то теряется. Кусок кода: void set_new_value (int...

Как в конец строки добавить несколько символов подчеркивания?
Прет всем ребята подскажите как Есть строка с определенной длинной есть едит нужно чтобы после нажатия кнопки щиталось количество...

Как прочесть значение из xml-файла?
у меня есть xml файл - как его прочесть с помощью extjs и вывести &quot;example 1&quot;? &lt;XMLDataResponse...

7
14 / 16 / 7
Регистрация: 21.05.2016
Сообщений: 48
09.09.2016, 20:35
Ты знаешь, что такое компиляция? Точка останова (как на картинке)?

0
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 95
10.09.2016, 11:51  [ТС]
ura_111, а причем тут это?? Она работала исправно

вот код, до этого момента она работает исправно

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
#include <cstring>
#include <fstream>
#include <stdlib.h>
#include "header.h"
using namespace std;
 
int main()
{
    int x;
    int record;
    int optionToChoose;
 
    char txtFile[20];
 
    //promting the user to type the name of the file
    cout<<"Please enter the filename to open: ";
    cin.getline(txtFile,20);
 
    strcat(txtFile,".txt");
 
    //reading the file
    ifstream inFile;
    inFile.open(txtFile);
 
    //in case of error while reading the file
    if(inFile.fail())
    {
        cout<<"Cannot open the file!"<<endl;
        exit(1);
    }
 
    inFile>>record;
    cout<<record<<endl;
    inFile.ignore(100,'\n');
 
    int maxSize_line=50;
    int maxRecord= record*2;
 
    char newItem[maxSize_line];
 
    char **chores= new char*[maxRecord];
 
    for(int i=0; i<maxRecord; i++)
    {
 
        chores[i]= new char[maxSize_line];//dlina
 
         inFile.getline(chores[i],maxSize_line,'\n');
         cout<<*(chores+i)<<endl;
 
    }
 
 
}
а после этого только идут проблемы с добавлением записи в конец массива. Я знаю что это за ошибки спасибо за напоминание, просто они в разных файлах находились и я быстро не посмотрев совместил их

Добавлено через 1 минуту
просто я не знаю как дальше это правильно делается перерыл везде никак не дотумкаю, подскажите пожалуйста что делать
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
10.09.2016, 12:13
almazuulu, зачем вам количество строк записывать в этом файле? их количество можно программно посчитать.
это в бинарных файлах как правило пишут заголовок а дальше файл состоит из кусков данных.
для считывания вообще советую
C++
1
scanf("s%",str);
а потом добавлять строку в массив. и всё.

Добавлено через 2 минуты
в этой ветке подробно описана работа с файлами
Открытие бинарного файла для чтения
0
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 95
10.09.2016, 12:19  [ТС]
Крюгер, просто на данном этапе в учебном курсе,где проходит мое обучение. мы до этого не дошли еще. Просто надо использовать лишь базовые инструменты. Я пока на начальном этапе. Было бы хорошо если бы кто то из опытных прогеров подсказал как быть а дальше бы я сам думаю бы догадался
0
14 / 16 / 7
Регистрация: 21.05.2016
Сообщений: 48
10.09.2016, 12:27
Тоесть есть динамический массив и нужно увеличить его размер на 1-цу, ТАК?


Вот набрасал программку. Размер вектора В[] сначало равно 5, а потом увеличивается на 1-цу и становится = 6-ти (значение равно 56)

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
#include <iostream>
using namespace std;
 
int main()
{
    int M;
    M = 5;
 
    int *B = new int[M];   // Создаем вектор В[]
 
    for (int i = 0; i < M; i++)
    {
        B[i] = rand() % 200; // Заполнение элементов B[]
    }   
 
    // Вывод вектора В[]
    cout << endl << "mASSIV B[]:" << endl;
    for (int i = 0; i < M; i++)
    {
        cout << "  " << B[i] << endl;
    }
 
    // Добавление элемента 56
    int t = 56;
    int *K = new int[M];   // Создаем промежуточный вектор K[]
 
    for (int i = 0; i < M; i++)
    {
        K[i] = B[i];
    }
    // Удаление массива В
    delete[] B;
    // и создание нового массива В [M+1]
    B = new int[M + 1];  
    for (int i = 0; i < M; i++)
    {
        B[i] = K[i];  // Возврат назад
    }
    // и добавление в конец
    B[M] = t;
 
    // Удаление промежуточного массива K
    delete[] K; 
 
    // Вывод B[m+1]
    cout << endl << "Teper B[]:" << endl;
    for (int i = 0; i < M + 1; i++)
    {
        cout << "  " << B[i] << endl;
    }
    
    // Удаление массивов В
    delete[] B; 
 
    system("pause");
    return 0;
}







Посмотри понимаешь ли ты код?
1
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
10.09.2016, 12:30
Лучший ответ Сообщение было отмечено almazuulu как решение

Решение

almazuulu, это тоже начальный этап.

вот держите функцию для подсчета строк. это всё базовые инструменты, базовее не бывает.
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
 
size_t count_lines(const char* filename) 
{
   FILE* fp;
   size_t cnt = 0u;
   while(fscanf(fp, "%*[^\n]%*c") != EOF)  cnt++;   
   return cnt;
}
каждая строка имеет завершающий нуль-терминатор, "\n" - подсчитав их количество, узнаем количество строк.
и ничто не мешает вам открыть любую книгу по с++ и там это точно описано. работа с файлами почти во всех книжках разжевана на столько, на сколько она могла быть разжевана.
1
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 95
10.09.2016, 12:39  [ТС]
Крюгер, ura_111, Спасибо вам! Думаю дальше сам разберусь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.09.2016, 12:39
Помогаю со студенческими работами здесь

Добавить новое слово в конец листа Excel из пользовательской формы
Всем привет! Как сделать так, чтобы введенное пользователем в пользовательскую форму слово добавлялось в конец листа Excel?

Как в конец уже имеющейся строки Memo добавить несколько символов?
Народ подскажите пожалуйста, как в Memo в конец уже имеющейся строки добавить несколько символов.

Как реализовать динамический массив char?
как реализовать динам.мас.Char? подпустим я ввожу &quot;привет мир мооаао валвал ваддва вдавад &quot;,как пример char v; char* txt = new...

Как прочесть все строки файла в массив?
Есть файлы, которые содержать числа. Вида: 54 2 18 697 Есть ли функция (прием), с помощью которой можно прочесть все разом...

Как переделать динамический массив int в char?
Как переделать динамический массив int в char? #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstdio&gt; #include &lt;iomanip&gt;...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru