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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
gluck-a
0 / 0 / 0
Регистрация: 28.05.2010
Сообщений: 23
#1

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

31.05.2010, 05:59. Просмотров 1791. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2010, 05:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамический массив строк. Ввод / вывод (C++):

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

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

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

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

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

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

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

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
Миниатюры
Динамический массив строк. Ввод / вывод  
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
31.05.2010, 21:27 #15
в цикле 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2010, 21:27
Привет! Вот еще темы с ответами:

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

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

Двумерный динамический массив. Ввод размера с клавиатуры - C++
Что я делаю не так? Хочу с клавиатуры вводить размерность двумерного динамического массива, вылетает в исключение в VS или выводит что...

Ввод данных/выделение памяти (динамический символьный массив) - C++
1. Если ли разница в таких двух вариантах объявления динамического символьного массива: а) char *string = (char*) malloc(N); б) char...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.05.2010, 21:27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru