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

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

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

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

08.05.2013, 19:29. Просмотров 521. Ответов 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;    
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2013, 19:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос программа выдает мусор (C++):

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

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

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

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

16
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] должно быть
0
Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
08.05.2013, 19:58  [ТС] #3
Условие: Заданы два массива записей, каждый из которых содержит фамилии и адреса сотрудников. Составленная программа должна перенести (в любом порядке) записи с двух массивов в третий, причем с двух одинаковых записей переносится только одна.

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

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

Судя по тому, что я вижу, все мои поправки должны были это исправить (такие как с выводом от 0 до l, c[l] = a[i])
0
Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 16:58  [ТС] #12
Это если сделать поправки которые Вы сказали
Все равно не работает (((
0
Миниатюры
программа выдает мусор  
Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 17:03  [ТС] #13
Еще один случай с поправками, в некоторых случаях программа работает
0
Миниатюры
программа выдает мусор  
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
1
Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 18:47  [ТС] #15
Огромное Вам спасибо)) А почему добавление этого цикла решило мою проблему? А поповоду предпоследнего я попробую изменить)
0
09.05.2013, 18:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2013, 18:47
Привет! Вот еще темы с ответами:

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

Не запускается программа, выдает ошибку - C++
К теме прикрепил скрин ошибки. В начале Visual Studio советовал использовать strcpy_s вместо strcpy и выдавал предупреждение. ...

Программа выдает не правильный результат - C++
Задание: Задана прямоугольная матрица размером N x M вещественных 8-ми байтовых чисел и вектор B(M) вещественных 8-ми байтовых чисел. ...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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