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

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

Войти
Регистрация
Восстановить пароль
 
Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
#1

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

08.05.2013, 19:29. Просмотров 499. Ответов 16
Метки нет (Все метки)

Не могу понять почему программа выдает мусор. И через раз работает правильно.
Помогите пожалуйста=)
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;    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2013, 19:29     программа выдает мусор
Посмотрите здесь:

Почему программа выдает мусор при сортировке извлечением? - C++
Почему выдает мусор при сортировке извлечением(типо -84554515 и похожие числа),остальные нормально работают #include &lt;stdio.h&gt; ...

Программа реверса строки: почему на экран выводится мусор, вместо нужного текста? - C++
Пишу программу реверса строки (меняет местами первый символ и последний, второй и предпоследний и т.д.). На экран выводится мусор, вместо...

Программа выдает ошибки - C++
Помогите, пожалуйста, исправить ошибки #include &lt;iostream&gt; //5,21//переделать #include &lt;string&gt; #include &lt;algorithm&gt; using...

Программа выдает ошибки - C++
#include &quot;iostream.h&quot; #include &quot;conio.h&quot; void vvod(int a,int n,int m) { int i,j; cout&lt;&lt;&quot;Vvedite elementi massiva\n&quot;; ...

Программа выдает ошибку - C++
Доброго времени суток, после компиляции программа дает сбой и выдает: Необработанное исключение в &quot;0x00051bd0&quot; в &quot;9.8.exe&quot;: 0xC0000005:...

Программа выдает одну и ту же ошибку - C++
Программа выдает одну и ту же ошибку Parameter argc/argv never used Как ее исправить? Программный код на С++ написанный в Borland...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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_
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_
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_
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_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 16:04  [ТС]     программа выдает мусор #9
Вот пожалуйста, это если в Dev-C++ компилить
Миниатюры
программа выдает мусор   программа выдает мусор  
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_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 16:58  [ТС]     программа выдает мусор #12
Это если сделать поправки которые Вы сказали
Все равно не работает (((
Миниатюры
программа выдает мусор  
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_
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++
К теме прикрепил скрин ошибки. В начале Visual Studio советовал использовать strcpy_s вместо strcpy и выдавал предупреждение. ...

Программа выдает приближенное значение - C++
В общем суть в том что нужно получить из формулы значение &quot;y&quot; при условии что x&lt;-1, но при вводе числа программа выдает приближенное...

Программа выдает не то,что нужно - C++
Задача: Даны действительные числа а1,...,а60. Организовать новый массив из тех чисел, которые входят в последовательность более одного...

Программа выдает разные ответы - C++
Нужно было написать программу, прибавляющую единицу к введенному числу. Программа зациклена, т.е. по нажатии клавиши Enter очищается...


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

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

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