Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
1

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

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

Author24 — интернет-сервис помощи студентам
Не могу понять почему программа выдает мусор. И через раз работает правильно.
Помогите пожалуйста=)
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2013, 19:29
Ответы с готовыми решениями:

Почему программа выдает мусор при сортировке извлечением?
Почему выдает мусор при сортировке извлечением(типо -84554515 и похожие числа),остальные нормально...

При решении программа выдаёт значение функции, равное 0 или выдаёт ошибку. Что не так?
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cmath&gt; using namespace std; long Fact(short...

При вычислении суммарного объема и веса программа выводит мусор
При исчислении суммарного веса и объема выводит мусор. Что не так? #include &lt;iostream&gt; #include...

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

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

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

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

Судя по тому, что я вижу, все мои поправки должны были это исправить (такие как с выводом от 0 до l, c[l] = a[i])
0
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 16:58  [ТС] 12
Это если сделать поправки которые Вы сказали
Все равно не работает (((
Миниатюры
программа выдает мусор  
0
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 17:03  [ТС] 13
Еще один случай с поправками, в некоторых случаях программа работает
Миниатюры
программа выдает мусор  
0
187 / 180 / 25
Регистрация: 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
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 18:47  [ТС] 15
Огромное Вам спасибо)) А почему добавление этого цикла решило мою проблему? А поповоду предпоследнего я попробую изменить)
0
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
09.05.2013, 18:56 16
Babochka_, потому что он у вас изначально был не заполнен. И, если проверок никаких не было, так и остался не заполнен, в нем хранился мусор, и при проверке if (flags[i]) этот мусор и считался за "1", а не за "0", как задумывалось
0
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
09.05.2013, 18:59  [ТС] 17
А понятно, еще раз большое спасибо))
0
09.05.2013, 18:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2013, 18:59
Помогаю со студенческими работами здесь

Программа выдает мусор при запросе телефона
Добрый день! Проблема заключаеться в том, что при сравнении телефона, даже не доходя до этого ,...

Выдаёт мусор
Нужна функция которая будет суммировать цифры в массиве, и количество цифр показывать в этом...

Программа выводит мусор
Программа убирает пробелы и меняет каждую цифру на следующую. Пробовал запускать на двух...

Программа которая выдает платформу компьютера выдает ошибку
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Вместо массива программа выводит "мусор"
#include &quot;stdafx.h&quot; #include&lt;stdio.h&gt; #include&lt;conio.h&gt; int main(void) { int i, n; float...

Программа выдаёт ошибку
Программа типа БД, написана на асэмблере. Данные вводятся нормально, но программа не хочет с ними...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru