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

Динамический массив строк. Ввод / вывод

31.05.2010, 05:59. Показов 3721. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!=) Помогите разобраться. Пишу функцию удаления строки из файла. организовал следующим образом, записал все что есть в файле в динамический массив строк. удалил нужную строку в массиве. потом пытаюсь вывести информацию на экран которая в массиве, а там аброкадабра(((
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
void del(void)
{
    FILE *BD;
    Persson p;
    int IDbuf=1,i=0;
    
BD=fopen("d:\BD.dat","r");
        
        fscanf(BD,"%d%s%s%lf",&p.ID,p.lastName,p.firstName,&p.Oklad);
        while(!feof(BD))
        {
        fscanf(BD,"%d%s%s%lf",&p.ID,p.lastName,p.firstName,&p.Oklad);
        IDbuf++;
        }
        fclose(BD);
 
 
char **mas = new char*[256];
if ((BD=fopen("d:\BD.dat","r"))==NULL)
    {
        printf("Не возможно открыть фал BD.txt\n");
        return;
    }
        fscanf(BD,"%d%s%s%lf",&p.ID,p.lastName,p.firstName,&p.Oklad);
        mas[p.ID] = new char[p.ID,p.lastName,p.firstName,p.Oklad];
        while(!feof(BD))
        {
        mas[p.ID] = new char[p.ID,p.lastName,p.firstName,p.Oklad];
        fscanf(BD,"%d%s%s%lf",&p.ID,p.lastName,p.firstName,&p.Oklad);
        }
 
printf("ВВедите ID работника которого хотите удалить\n");
cin>>i;
delete mas[i];
 
for(i=0;i<IDbuf-1;i++) 
    printf("%s\n",mas);
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.05.2010, 05:59
Ответы с готовыми решениями:

Динамический ввод и вывод данных в двумерный массив
Не могу реализовать ввод и вывод данных двумерного массива используя указатель на указатель, в чём проблема? cin &gt;&gt; *(*(p+n*i)+j); ...

Создать динамический массив. ввод,вывод и обработку элементов массива реализовать через функции
создать динамический массив. ввод,вывод и обработку элементов массива реализовать через функции

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

31
33 / 33 / 5
Регистрация: 16.11.2009
Сообщений: 207
31.05.2010, 10:25
Цитата Сообщение от gluck-a Посмотреть сообщение
C
1
char **mas
может потому что mas - двойной указатель?
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
31.05.2010, 10:44
Цитата Сообщение от gluck-a Посмотреть сообщение
удалил нужную строку в массиве
в массиве вы ничего не удалили
после удаления строки нужно сдвигать остальные строки
1
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 23
31.05.2010, 13:19  [ТС]
я профан а как?
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
31.05.2010, 13:28
C++
1
2
3
4
5
6
7
    int count = 4; // общее ко-во
 
    int del_num = 2; // удаляемый
    delete mas[del_num];
    for (int i=del_num; i<count-1; i++)
        mas[i] = mas[i+1];
    count--;
1
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 23
31.05.2010, 13:43  [ТС]
спасибо, но вс ровно выдаёт обракодабру, я в массив строки по моему не правильно передаю...
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
31.05.2010, 13:57
а это уже другой вопрос
C++
1
2
mas[p.ID] = new char[_длина_строки_];
... заполнение строки
1
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 23
31.05.2010, 14:40  [ТС]
что то поисковики не помогают(( помоги пожалуйста, вообщем в строку надо записать 4 переменные, но они разных типов
C++
1
2
mas[p.ID] = new char[256];
mas[p.ID]= (char)(p.ID,p.lastName,p.firstName,p.Oklad);
p.ID, -int
p.lastName -char
p.firstName -char
p.Oklad - double
и наверно через пробел их лучше записать, что б потом читать было удобно.
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
31.05.2010, 15:11
C++
1
2
mas[p.ID] = new char[256];
sprintf(mas, "%d %s %s %.3lf", p.ID, p.lastName, p.firstName, p.Oklad);
1
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 23
31.05.2010, 15:29  [ТС]
ошибку вызывает - (error C2664: 'sprintf' : cannot convert parameter 1 from 'char **' to 'char *')
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
31.05.2010, 15:45
sprintf(mas[p.ID], ....
1
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 23
31.05.2010, 18:49  [ТС]
нет-нет, это все верно это организация массива такая.
блинн)) не туда)) и не удаляется)))
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
31.05.2010, 18:55
при чём тут организация
я первый раз неправильно написал
C++
1
sprintf(mas, "%d %s %s %.3lf", p.ID, p.lastName, p.firstName, p.Oklad);
а нужно
C++
1
sprintf(mas[p.ID], "%d %s %s %.3lf", p.ID, p.lastName, p.firstName, p.Oklad);
1
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 23
31.05.2010, 18:58  [ТС]
да я вообще не сюда это хотел написать))) то что ты написал я понял, оно заработало)) тока всеровно делает не то что мне надо(((

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
void del(void)
{
    FILE *BD;
    Persson p;
    int IDbuf=1,i=0,x;
    
BD=fopen("d:\BD.dat","r");
        
        fscanf(BD,"%d%s%s%lf",&p.ID,p.lastName,p.firstName,&p.Oklad);
        while(!feof(BD))
        {
        fscanf(BD,"%d%s%s%lf",&p.ID,p.lastName,p.firstName,&p.Oklad);
        IDbuf++;
        }
        //printf("Буфер ID = %d\n",IDbuf);
        fclose(BD);
 
char **mas = new char*[IDbuf];
if ((BD=fopen("d:\BD.dat","r"))==NULL)
    {
        printf("Не возможно открыть фал BD.txt\n");
        return;
    }
        fscanf(BD,"%d%s%s%lf",&p.ID,p.lastName,p.firstName,&p.Oklad);
        mas[p.ID] = new char[256];
        sprintf(mas[p.ID], "%d %s %s %.2lf", p.ID, p.lastName, p.firstName, p.Oklad); 
        while(!feof(BD))
        {
        mas[p.ID] = new char[256];
        sprintf(mas[p.ID], "%d %s %s %.2lf", p.ID, p.lastName, p.firstName, p.Oklad);  
        fscanf(BD,"%d%s%s%lf",&p.ID,p.lastName,p.firstName,&p.Oklad);
        }
 
printf("ВВедите ID работника которого хотите удалить\n");
 
//cin>>x;
 
    
 //delete mas[x];
 //for (int i=x; i<IDbuf-1; i++)
//    mas[i] = mas[i+1];
// IDbuf--;
 
for(i=0;i<IDbuf;i++) 
    printf("%s\n",mas);
 
}
Миниатюры
Динамический массив строк. Ввод / вывод  
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
31.05.2010, 21:27
в цикле while перепутано - fscanf после sprintf (правильно сделано до цикла)

и выводится не то
C++
1
2
for(i=0;i<IDbuf;i++) 
    printf("%s\n",mas[IDbuf]);
Добавлено через 1 минуту
да и вообще непонятно как оно с файла считывается и куда
первый раз всё идёт в одну "p" ("IDbuf++" ни на что не влияет)
второй в mas[p.ID] - p.ID в цикле не меняется
0
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 23
01.06.2010, 14:07  [ТС]
цикл организован правильно, уверяю Вас, это 100%, у меня функции остальные по тому же принцепу построены и работают)
Сама "р"- это переменная класса Persson.
p.ID меняется, она каждый раз со строки считывает, а там в столбик в файле 1,2,3 и т.д.
По тому же принцепу организовал добавление записей, работает.
эти ид прога сама ставит, то есть читает строки и записывает IDbuf.
Возможно в этой функции с IDbuf что то напортачил, вот сейчас пытаюсь разобраться.

проверил IDbuf считает количество записей(строк) в файле, работает исправно)
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
01.06.2010, 14:22
Цитата Сообщение от gluck-a Посмотреть сообщение
цикл организован правильно, уверяю Вас, это 100%, у меня функции остальные по тому же принцепу построены и работают)
работать то работают, но зачем первый цикл - там то ничего не меняется - зачем два раза файл считывать?

а вывод "абракадабры" я объяснил - "printf("%s\n",mas)" выводит адрес mas
1
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 23
01.06.2010, 14:26  [ТС]
первый раз тупо считает сколько записей(строк), что б создать размер массива.
0
37 / 37 / 2
Регистрация: 13.05.2010
Сообщений: 81
01.06.2010, 15:40
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main(){
        ifstream in ("111.txt");
        ofstream out ("222.txt");
       
        string a, temp;
        int k=0;
while (getline (in,a)){
        a+="\n"; 
        if (k) {cout<<temp; out<<temp;}
        temp=a;
        k++;}
 
return 0;}
извините что вмешиваюсь, но к чему столько букв??? если так можно)))

Добавлено через 7 минут
в пред примере удаляло последн а так по номеру

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main(){
        ifstream in ("111.txt");
        ofstream out ("222.txt");
       
        string a;
        int k=1, l; cin>>l;
while (getline (in,a)){
        a+="\n"; 
        if (k!=l) {cout<<a; out<<a;}
        k++;}
 
return 0;}
1
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 23
01.06.2010, 15:42  [ТС]
да, спасибо, вариант безусловно хороший) но задание состоит имено работ с 1 файлом что б считать его в память там прокрутить его и вывести в на экран, ну в последствии в тот же файл)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.06.2010, 15:42
Помогаю со студенческими работами здесь

Ввод данных в динамический массив из файла
написал программу, вроде все по правилам,только почему-то каждый раз переходит по стрелке &quot;файл не открыт&quot; #include...

Ввод данных в динамический массив из файла
В задаче написано: введение данных в динамический массив делать из файла. Как это?

Динамический массив. Ввод размерности с клавиатуры
Вечер добрый. Прошу помощи у Вас. Суть просьбы : создать динамический массив(квадрат) с размерностью n, n (вводится с клавиатуры)....

Ввод данных в двумерный динамический массив
Добрый вечер! Осваиваю уже третий день двумерные массивы в С++, но каким образом они создаются до сих пор не понятно. У меня было...

Ввод данных в динамический массив структур
Помогите правильно написать функцию - сколь не пробовал, не получается - getinfo(), которая требует ввода данных о студентах. Она...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru