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

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

Войти
Регистрация
Восстановить пароль
 
Brahmastra
 Аватар для Brahmastra
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 8
#1

Прата С. 6.6 - C++

23.09.2013, 13:14. Просмотров 336. Ответов 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
//6.6.cpp
#include <iostream>
using namespace std;
struct card 
{
       char name[50];
       double sum;
};
int main()
{
    cout << "Введите количество меценатов: ";
    int k;
    cin >> k;
    card * naim = new card[k];
    for (int i = k; i >= 0; i--)
    {
          cout << "\nВведите имя " << k << " мецената\n";
          cin >> naim[k].name;
          cout << "Введите сумму пожертвования " << k << " мецената\n";
          cin >> naim[k].sum;
    }
    for (int i = 0; naim[i].sum >= 10000, i <= k; i++)
        {
        cout << "\nGrand Patrons: \n"
             << naim[i].name << "\t" << naim[i].sum << "\n";
        if (naim[i].sum < 10000)
             cout << "Ничего"; 
        }    
    for (int i = 0; naim[i].sum < 10000, i <= k; i++)    
        {
        cout << "\nPatrons: \n"
             << naim[i].name << "\t" << naim[i].sum << "\n";
        if (naim[i].sum = 0)
             cout << "Ничего";
        }  
    cin.get();
    cin.get();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2013, 13:14     Прата С. 6.6
Посмотрите здесь:

Ищу книгу С. Прата C++
Прата - составные типы C++
С.Прата глава 5(циклы) зад.4 C++
Прата -> Шлее = PROFIT? C++
Странная задача из Прата 2011 C++
C++ Ошибка в коде(С.Прата)
Прата задача 6.9 C++
Самоучитель С. Прата Нарисовать треугольник C++
C++ C++ - Прата задача 6.9
Изучение С++11: Липпман или Прата? C++
C++ Прата, задача 2, глава 6
Листинг 4.13 Прата, массив структур C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HedgehogLu
 Аватар для HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 254
23.09.2013, 13:18     Прата С. 6.6 #2
проблема в индексации команда нью выделяет память под к элементов, однако индексация происходит с нуля. поэтому последний к-й элемент будет иметь индекс к-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
int main()
{
    cout << "Введите количество меценатов: ";
    int k;
    cin >> k;
    card * naim = new card[k];
    for (int i = k-1; i >= 0; i--)
    {
          cout << "\nВведите имя " << i+1 << " мецената\n";
          cin >> naim[i].name;
          cout << "Введите сумму пожертвования " << i << " мецената\n";
          cin >> naim[i].sum;
    }
    for (int i = 0; naim[i].sum >= 10000, i < k; i++)
        {
        cout << "\nGrand Patrons: \n"
             << naim[i].name << "\t" << naim[i].sum << "\n";
        if (naim[i].sum < 10000)
             cout << "Ничего"; 
        }    
    for (int i = 0; naim[i].sum < 10000, i < k; i++)    
        {
        cout << "\nPatrons: \n"
             << naim[i].name << "\t" << naim[i].sum << "\n";
        if (naim[i].sum = 0)
             cout << "Ничего";
        }  
    cin.get();
    cin.get();
    return 0;
}
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2013, 13:38     Прата С. 6.6 #3
При таком условии в for():
C++
1
naim[i].sum >= 10000, i < k;
будет учитываться только то, что после запятой.
Brahmastra
 Аватар для Brahmastra
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 8
23.09.2013, 13:56  [ТС]     Прата С. 6.6 #4
спасибо! HedgehogLu, исправил, вы тоже немного не дописали
в 12 строке ;-)
cout << "Введите сумму пожертвования " << i+1 << " мецената\n";

Добавлено через 9 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
При таком условии в for():
C++
1
naim[i].sum >= 10000, i < k;
будет учитываться только то, что после запятой.
заменил на &&, но что-то работает не так(
HedgehogLu
 Аватар для HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 254
23.09.2013, 14:09     Прата С. 6.6 #5
сорри не досмотрел.
правил то только ту ошибку на которую указали
а в целом цикл вообще не правильный получается
т.к. цикл выполняется до тех пор пока выполняется условие (и ссно цикл вообще криво выполнялся, и останавливался когда натыкался на любого плательщика меньше 10000)
Поэтому правильно думаю будет так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 cout << "\nGrand Patrons: \n";
int res=0;
 for (int i = 0; i < k; i++)
        {
      if (naim[i].sum >= 10000) {
             cout<< naim[i].name << "\t" << naim[i].sum << "\n";
             res++;
             }
        }    
    if (!(res)) cout << "none"<<"\n";
 cout << "\nPatrons: \n";
    res=0;
 for (int i = 0; i < k; i++)
        {
      if (naim[i].sum <10000) {
             cout<< naim[i].name << "\t" << naim[i].sum << "\n";
             res++;
             }
        }    
    if (!(res)) cout << "none"<<"\n";
Brahmastra
 Аватар для Brahmastra
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 8
23.09.2013, 14:24  [ТС]     Прата С. 6.6 #6
спасибо! добрый человек :-)
вот, если кому надо, готовая прога.
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
//6.6.cpp
#include <iostream>
using namespace std;
struct card 
{
       char name[50];
       double sum;
};
int main()
{
    cout << "Введите количество меценатов: ";
    int k;
    cin >> k;
    card * naim = new card[k];
    for (int i = k-1; i >= 0; i--)
    {
          cout << "\nВведите имя " << i+1 << " мецената\n";
          cin >> naim[i].name;
          cout << "Введите сумму пожертвования " << i+1 << " мецената\n";
          cin >> naim[i].sum;
    }
     cout << "\nGrand Patrons: \n";
     int res=0;
     for (int i = 0; i < k; i++)
        {
              if (naim[i].sum >= 10000) 
              {
              cout<< naim[i].name << "\t" << naim[i].sum << "\n";
              res++;
              }
        }    
    if (!(res)) cout << "none"<<"\n";
    cout << "\nPatrons: \n";
    res=0;
    for (int i = 0; i < k; i++)
        {
             if (naim[i].sum <10000) 
             {
             cout<< naim[i].name << "\t" << naim[i].sum << "\n";
             res++;
             }
        }    
    if (!(res)) cout << "none"<<"\n";  
    cin.get();
    cin.get();
    return 0;
}
Yandex
Объявления
23.09.2013, 14:24     Прата С. 6.6
Ответ Создать тему
Опции темы

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