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

программа выдает мусор - C++

Восстановить пароль Регистрация
 
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
08.05.2013, 19:29     программа выдает мусор #1
Не могу понять почему программа выдает мусор. И через раз работает правильно.
Помогите пожалуйста=)
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
80
81
82
83
84
85
86
87
#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
#define SIZE 2
 
struct addr
{
       char surname[45]; 
       char address[45];
};
int main()
{
    int l = 0;
    addr a[SIZE], b[SIZE], c[SIZE*2];
    fflush(stdin);
 
    cout<<"Enter data in the 1 list "<<endl;
    for(int i=0; i<SIZE; i++)
    {    cout<<"Enter surname and address  "<<i+1<<endl;
         cin.getline(a[i].surname, 45);
         cin.getline(a[i].address, 45);
    }
 
    cout<<"Enter data in the 2 list    "<<endl;
    for(int i=0; i<SIZE; i++)
    {    cout<<"Enter surname  and address  "<<i+1<<endl;
         cin.getline(b[i].surname, 45);
         cin.getline(b[i].address, 45);
    }
    //   system("cls");
    cout<<endl;
    int flags[SIZE];
    for(int j=0; j<SIZE; j++)
    {     for(int i=j+1; i<SIZE; i++) 
             { 
                  if(!strcmp( a[j].surname,  a[i].surname)) 
                      if(!strcmp( a[j].address,  a[i].address)) 
                      {
                         flags[j]=0;
                         flags[i]=1;
                      }
             }
    }
    for (int i=0; i<SIZE; i++) 
        if (flags[i]) 
        {     
           c[i]=a[i];
           l++; 
        }
    
   for(int k=0; k<SIZE; k++)  
   {
       bool is_equal = false;
       for(int p = 0; p <l; p++)
       {
           if(!strcmp( a[p].surname,  b[k].surname))  
               if(!strcmp( a[p].address,  b[k].address)) 
               {  
                   is_equal = true;
                 break;     
               }
               }
        if(is_equal == false)
        {
                c[l]=b[k];
                        l++;
        }
    } 
   
    cout<<endl;
        fflush(stdin);
  cout<<"result"<<endl;
     for (int i=1; i<=l; i++)
     {       
        cout<<"person"<<i<<endl;
        cout<<"surname   "<<c[i].surname<<endl;
        cout<<"address    "<<c[i].address<<endl;
     }   
    
        /* addr a[SIZE]={};
        addr b[SIZE]={};
        addr c[l]={};*/
       memset(&c, 0, sizeof(addr)); 
     system ("pause");
return 0;    
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
08.05.2013, 19:46     программа выдает мусор #2
Цитата Сообщение от Babochka_ Посмотреть сообщение
c[i]=a[i];
Цитата Сообщение от Babochka_ Посмотреть сообщение
c[l]=b[k];
Плохо. Перегружай оператор "=" для своего класса и там используй strcpy для строк, иначе генеруремый по умолчанию компилятором оператор "=" просто перезапишет указатели и память не освободится.
Цитата Сообщение от Babochka_ Посмотреть сообщение
memset(&c, 0, sizeof(addr));
sizeof(addr) может быть равно 8 на некоторых компиляторах. Точно у тебя 90 выдает?

Что вообще программа делать должна?

Добавлено через 9 минут
Цитата Сообщение от Babochka_ Посмотреть сообщение
bool is_equal = false;
Попробуй вынести из цикла? Если правильно помню, то да, оно должно заного пересоздавать переменную на каждой итерации, но все же

Добавлено через 1 минуту
Цитата Сообщение от Babochka_ Посмотреть сообщение
c[i]=a[i];
Походу тут c[l] должно быть
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
08.05.2013, 19:58  [ТС]     программа выдает мусор #3
Условие: Заданы два массива записей, каждый из которых содержит фамилии и адреса сотрудников. Составленная программа должна перенести (в любом порядке) записи с двух массивов в третий, причем с двух одинаковых записей переносится только одна.

Добавлено через 35 секунд
Хорошо сейчас попробую исправить сделаные замечания

Добавлено через 10 минут
Попробуй вынести из цикла? Если правильно помню, то да, оно должно заного пересоздавать переменную на каждой итерации, но все же
Походу тут c[l] должно быть
Я попробовала но так не работает правильно
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
08.05.2013, 20:09     программа выдает мусор #4
Babochka_, вынести из цикла, но в цикле то все равно нужно false переменной давать.
А c[l] там действительно что-то странное, ибо вывод от i до l, что уже как-то неверно.
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
08.05.2013, 20:50  [ТС]     программа выдает мусор #5
l - это количество элементов в структуре с. А как там лучше сделать?
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
09.05.2013, 07:10     программа выдает мусор #6
Babochka_, в таком случае вывод от 0 до <l
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 09:27  [ТС]     программа выдает мусор #7
по логике оно и должно так работать но когда вывод от 0 <l, то во всех случаях в ответе есть мусор и всегда в последнем, а если от 1 <=l, то когда все элементы одинаковые, то программа работает абсолютно правильно.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
09.05.2013, 14:53     программа выдает мусор #8
Babochka_, что такое мусор в вашем понимании? Можете привести пример входных данных и соответствующий вывод? А лучше скриншотом
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 16:04  [ТС]     программа выдает мусор #9
Вот пожалуйста, это если в Dev-C++ компилить
Миниатюры
программа выдает мусор   программа выдает мусор  
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 16:09  [ТС]     программа выдает мусор #10
Еще один случай тут не совсем правильно работает
Миниатюры
программа выдает мусор  
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
09.05.2013, 16:46     программа выдает мусор #11
Babochka_, это при каких изменениях начального кода то? Или вы ничего не меняли?

Судя по тому, что я вижу, все мои поправки должны были это исправить (такие как с выводом от 0 до l, c[l] = a[i])
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 16:58  [ТС]     программа выдает мусор #12
Это если сделать поправки которые Вы сказали
Все равно не работает (((
Миниатюры
программа выдает мусор  
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 17:03  [ТС]     программа выдает мусор #13
Еще один случай с поправками, в некоторых случаях программа работает
Миниатюры
программа выдает мусор  
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
09.05.2013, 17:45     программа выдает мусор #14
После строчки
C++
1
 int flags[SIZE];
поставьте:
C++
1
2
3
4
for (int i = 0; i < SIZE; ++i)
{
flags[i] = 1;
}
Это должно исправить последнее ваше сообщение.
А почему не работает предпоследнее, так потому, что алгоритм нахождения совпадений неверен. Ну проверили вы первый массив на совпадения и записали в массив С, но второй массив не проверили, вот и пишите в выходной массив дважды s/s
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 18:47  [ТС]     программа выдает мусор #15
Огромное Вам спасибо)) А почему добавление этого цикла решило мою проблему? А поповоду предпоследнего я попробую изменить)
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
09.05.2013, 18:56     программа выдает мусор #16
Babochka_, потому что он у вас изначально был не заполнен. И, если проверок никаких не было, так и остался не заполнен, в нем хранился мусор, и при проверке if (flags[i]) этот мусор и считался за "1", а не за "0", как задумывалось
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2013, 18:59     программа выдает мусор
Еще ссылки по теме:

Почему программа не работает и выдает ошибки? C++
Программа выдает не то,что нужно C++
C++ Программа выдает ошибку
Программа выдает ошибки C++
Не запускается программа, выдает ошибку C++

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

Или воспользуйтесь поиском по форуму:
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 18:59  [ТС]     программа выдает мусор #17
А понятно, еще раз большое спасибо))
Yandex
Объявления
09.05.2013, 18:59     программа выдает мусор
Ответ Создать тему
Опции темы

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