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

Не копируется структура C++ (по введеному номеру телефона удалить информацию из файла) - C++

Восстановить пароль Регистрация
 
NatalyPR
0 / 0 / 0
Регистрация: 17.05.2013
Сообщений: 8
18.05.2013, 00:56     Не копируется структура C++ (по введеному номеру телефона удалить информацию из файла) #1
Рабочий код:
Структура в заголовочном файле:
C++
1
2
3
4
5
6
7
8
9
struct contact{
    int ID;
    std::string Name;
    std::string Surname;
    std::string Midlename;
    int IDgroup;
    birthday Birthday;
    int age;
};
Функция тоже в заголовочном (не ругайтесь почему в заголовочном, так как на это есть причины):
C++
1
2
3
4
5
6
7
8
9
10
11
12
template <class st> void DeleteInformation(st *arr,int *size,int temp_ID){
    int TEMPsize=0;
    st *arr_TEMP = new st[100];
    for(int i=0,j=0;i<*size;i++)
        if(arr[i].ID!=temp_ID){
            arr_TEMP[j]=arr[i];
            j++;
            }
        else TEMPsize++;
        *size-=TEMPsize;
        for(int i=0;i<*size;i++) arr[i]=arr_TEMP[i];
}
main.cpp
C++
1
2
3
4
5
6
7
8
printf("Введите ID контакта: ");
    temp_ID=toint(temp_ID);
    DeleteInformation(con,&size,temp_ID);
 
    FILE *CNT;
    CNT=fopen("Contacts.dat","wb");
    fwrite(con,sizeof(contact),size,CNT);
    fclose(CNT);
Не рабочий код:
C++
1
2
3
4
5
6
struct numbers{
    int ID;
    std::string type;
    std::string number;
    std::string country;
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
    printf("Введите номер телефона для удаления: ");
scanf("%s",DELETE_NUM.c_str());
sizeNUM_TEMP=0;
    for(int i=0,j=0;i<sizeNUM;i++){
        if(strcmp(n[i].number.c_str(),DELETE_NUM.c_str())!=0){
            n_TEMP[j]=n[i]; 
            j++;
        }
        else sizeNUM_TEMP++;
    }
    sizeNUM-=sizeNUM_TEMP;
    for(int i=0;i<sizeNUM;i++) n[i]=n_TEMP[i];
Во втором случае у меня не копируется структура... в итоге выдает пустые поля.
В первом, повторюсь, все работает.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2013, 00:56     Не копируется структура C++ (по введеному номеру телефона удалить информацию из файла)
Посмотрите здесь:

C++ Удалить ненужную информацию в конце файла, не создавая другой файл
упорядочить выбранную информацию по возврастанию номеров телефона, а затем записать в файл C++
Составить программу, в которой описывается структура из полей: Фамилия, Номер телефона, Год рождения C++
Структура: Выполните сортировку данных по номеру билета C++
Структура. Вывести информацию о поездах, следующих из Москвы в Санкт-Петербург C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,397
18.05.2013, 05:00     Не копируется структура C++ (по введеному номеру телефона удалить информацию из файла) #2
какой-то адовый код у вас.
Скажите лучше, что хотите сделать - легче переписать будет.
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 584
Завершенные тесты: 2
18.05.2013, 10:31     Не копируется структура C++ (по введеному номеру телефона удалить информацию из файла) #3
Добавлено через 6 минут
Цитата Сообщение от NatalyPR Посмотреть сообщение
*size-=TEMPsize;
В первом примере вы так делали.... Может так же стоит попробовать?
NatalyPR
0 / 0 / 0
Регистрация: 17.05.2013
Сообщений: 8
18.05.2013, 11:09  [ТС]     Не копируется структура C++ (по введеному номеру телефона удалить информацию из файла) #4
какой-то адовый код у вас.
Скажите лучше, что хотите сделать - легче переписать будет.
У меня есть массив структур, например:
n[0]: 22336655 - мобильный - Россия
n[1]: 44558877 - рабочий - Канада
n[2]: 44556699 - мобильный - Швеция
и так далее

Все это у меня сохранено в файл.

Пользователь вводит номер телефона и из файла должна удалиться информация.
Я делала это так, что все что не равно веденному номеру переписывается в новый массив. А потом новый массив перезаписывала в файл.

Как-то так

В первом примере вы так делали.... Может так же стоит попробовать?
Не, звезда там только потому, что это функция, которая в том числе изменяет значение size.
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 584
Завершенные тесты: 2
18.05.2013, 11:37     Не копируется структура C++ (по введеному номеру телефона удалить информацию из файла) #5
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
int main()
{
    struct numbers{
    int ID;
    std::string type;
    std::string number;
    std::string country;
    };
    numbers n[3];
    n[0].number = "12345";
    n[0].country = "qwe";
    n[0].ID = 12;
    n[0].type = "ast";
 
    n[1].number = "1234";
    n[1].country = "wer";
    n[1].ID = 13;
    n[1].type = "sdf";
    
    n[2].number = "12346";
    n[2].country = "ert";
    n[2].ID = 14;
    n[2].type = "dfg";
 
    numbers n_TEMP[3];
    string DELETE_NUM;
    int sizeNUM = 3;
    printf("Введите номер телефона для удаления: ");
    scanf("%s",DELETE_NUM.c_str());
    int sizeNUM_TEMP=0;
    for(int i=0,j=0; i < sizeNUM; i++){
        if(strcmp(n[i].number.c_str(),DELETE_NUM.c_str())!=0){
            n_TEMP[j]=n[i]; 
            j++;
        }
        else sizeNUM_TEMP++;
    }
    sizeNUM-=sizeNUM_TEMP;
    for(int i=0;i<sizeNUM;i++) 
        n[i]=n_TEMP[i];
 
    for(int i=0;i<sizeNUM;i++) {
        cout << i+1 << endl;
        cout << "ID " << n[i].ID << endl;
        cout << "country " << n[i].country << endl;
        cout << "type " << n[i].type << endl;
        cout << "number " << n[i].number << endl << endl;
    }
    return 0;
}
все правильно работает... не знаю, что у вас не получается
NatalyPR
0 / 0 / 0
Регистрация: 17.05.2013
Сообщений: 8
18.05.2013, 14:16  [ТС]     Не копируется структура C++ (по введеному номеру телефона удалить информацию из файла) #6
Короче, сделала так, что работает, но это напрочь взрывает мою логику.
C++
1
2
3
4
5
6
printf("Введите e-mail для удаления: ");
scanf("%s",DELETE_EMAIL.c_str());
sizeEMAIL_TEMP=0;
    for(int i=0,j=0;i<sizeE_MAILS;i++)
        if(strcmp(e[i].email.c_str(),DELETE_EMAIL.c_str()) != 0)
            e[i].ID=0;
И это все что требуется для удаления... почему он так удаляет, хрен поймешь. Типо обнуляется ID и из массива тоже удаляется. Почему? Причем это только в 2 структурах, в остальных такого нету.

C++
1
все правильно работает... не знаю, что у вас не получается
да, так у меня тоже работало, но в файл записывались пустые поля. И после перезагрузки консоли выводило пустоту.
Yandex
Объявления
18.05.2013, 14:16     Не копируется структура C++ (по введеному номеру телефона удалить информацию из файла)
Ответ Создать тему
Опции темы

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