0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 22
1

Не выводит список на экран

05.09.2012, 18:12. Показов 822. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Проблема вот в чем: при запуске программы ошибок не возникает, только мигнет черное окошко и все.
Отлаживая программу выяснил, что проблемма находится тут, операция присваивания не происходит, пишет невозможно вычислить выражение:
C++
1
2
3
4
5
6
7
8
9
10
int n = sizeof(books);
for (int i = 0; i < n; i++)
{
    last = new(record);
    (*last).book.author = books[i].author;
    (*last).book.title = books[i].title;
    last->book.city = books[i].city;
    last->book.firm = books[i].firm;
    last->book.year = books[i].year;
    last->book.pages = books[i].pages;
Суть программы в выводе на экран списка из: автора, названия книги, год и т.п.
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
88
89
90
#include <string.h>
#include <iostream>
#include <conio.h>
using namespace std;
struct card {
    char *author;
    char *title;
    char *city;
    char *firm;
    int year;
    int pages;
};
void printbook (card &car)
{ static int count = 0;
cout <<"\n"<<++count<<". "<<car.author;
cout <<' '<<car.title<<".- "<<car.city;
cout <<": "<<car.firm<<", ";
cout <<"\n"<<car.year<<".- "<<car.pages<<"c.";
}
struct record
{
    card book;
    record *prior;
    record *next;
};
card books[] = {
    {"wiener R.S. ", "Turbo","M","Mir", 1991,384},
    {"wiener R.S. ", "Turbo","M","Mir", 1991,384},
    {"wiener R.S. ", "Turbo","M","Mir", 1991,384},
    {"wiener R.S. ", "Turbo","M","Mir", 1991,384},
};
int main()
{
    record *begin = NULL;
record *last = NULL;
record *list;
int n = sizeof(books);
for (int i = 0; i < n; i++)
{
    last = new(record);
    (*last).book.author = books[i].author;
    (*last).book.title = books[i].title;
    last->book.city = books[i].city;
    last->book.firm = books[i].firm;
    last->book.year = books[i].year;
    last->book.pages = books[i].pages;
    if (begin = NULL)
    {last->prior = NULL;
    begin = last; last->next = NULL;
    }
    else
    {
        list = begin;
        while (list)
        {if(strcmp(last->book.author,list->book.author)<0)
        {
            if (begin == list)
            {
                last->prior = NULL;
                begin = last;
            }
            else
            {list->prior->next = last;
            last->prior = list->prior;
            }
            list->prior = last;
            last->next = list;
            break;
        }
        if (list->next == NULL)
        {
            last->next = NULL;
            last->prior = last;
            list->next = last;
            break;
        }
        list = list->next;
        }
        
    }
    }
    list = begin;
    cout<<'\n';
    while (list)
    {
        printbook (list->book);
        list =  list->next;
    }
    getch();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2012, 18:12
Ответы с готовыми решениями:

Разработать программу которая выводит на экран, которая выводит содержимое текущего каталога, упорядоченное по времени
Помогите пожалуйста!! В уинвере не изучали язык С++ а заставляют на нем написать программку (( В...

Напишите программу, которая выводит на экран содержимое файла и выводит сумму чисел файла
Напишите программу, которая выводит на экран содержимое файла D:\numbers.txt. и выводит сумму...

Написать программу, которая выводит на экран список всех файлов
Написать программу, которая выводит на экран список всех файлов текущего каталога с датой и...

Написать программу, которая выводит на экран список всех файлов и каталогов
Написать программу, которая выводит на экран список всех файлов и каталогов, содержащихся в...

9
224 / 224 / 38
Регистрация: 17.12.2010
Сообщений: 713
05.09.2012, 18:53 2
ты тут проверяшь или присваиваешь?
C++
1
2
3
4
if (begin = NULL)
    {last->prior = NULL;
    begin = last; last->next = NULL;
    }
0
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 22
05.09.2012, 19:09  [ТС] 3
Цитата Сообщение от Aloir Посмотреть сообщение
ты тут проверяшь или присваиваешь?
C++
1
2
3
4
if (begin = NULL)
    {last->prior = NULL;
    begin = last; last->next = NULL;
    }
Проверяю
0
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 22
06.09.2012, 22:28  [ТС] 4
ни кто не может помочь с этим вопросом? я просто голову ломаю уже который день, помогите пожалуйста
0
224 / 224 / 38
Регистрация: 17.12.2010
Сообщений: 713
06.09.2012, 22:49 5
Цитата Сообщение от Андрей979 Посмотреть сообщение
Проверяю
тогда почему у тебя стоит 1 равно?
C++
1
if ( begin == null)
дальше
C++
1
int n = sizeof(books);
ты хочешь узнать количество элементов ? или размер выделенной памяти под массив, у тебя второе делается

ну и дальше смотри в дебаге

Добавлено через 18 минут
по сути - это исправишь и заработает.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,511
06.09.2012, 23:03 6
Цитата Сообщение от Андрей979 Посмотреть сообщение
C++
1
2
3
4
(*last).book.author = books[i].author;
 (*last).book.title = books[i].title;
 last->book.city = books[i].city;
 last->book.firm = books[i].firm;
в чем причина таких разных записей???
Цитата Сообщение от Андрей979 Посмотреть сообщение
card book;
Цитата Сообщение от Андрей979 Посмотреть сообщение
int n = sizeof(books);
получишь размер массива в байтах
если тебе нужен размер массива в количестве записей то делай так
C++
1
int n = sizeof(books)/ sizeof(card)
0
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 22
07.09.2012, 16:47  [ТС] 7
ничего не изменилось
при отладке шаг за шагом в правой части все значения есть (имя книги и т.п.), а в левой части пишет cxx0030 не возможно вычислить выражение

левая часть правая

last = new(record);
(*last).book.author = books[i].author;
(*last).book.title = books[i].title;
last->book.city = books[i].city;
last->book.firm = books[i].firm;
last->book.year = books[i].year;
last->book.pages = books[i].pages;

и после этого идет косяк по всей программе
0
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
07.09.2012, 19:32 8
Немного поправил
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
#include <string.h>
#include <iostream>
 
using namespace std;
 
struct card {
    char *author;
    char *title;
    char *city;
    char *firm;
    int year;
    int pages;
};
void printbook (card &car)
{ static int count = 0;
cout <<"\n"<<++count<<". "<<car.author;
cout <<' '<<car.title<<".- "<<car.city;
cout <<": "<<car.firm<<", ";
cout <<"\n"<<car.year<<".- "<<car.pages<<"c.";
}
struct record
{
    record(const card& book_):book(book_),prior(nullptr),next(nullptr){};//новая строка
 
    card book;
    record *prior;
    record *next;
};
card books[] = {
    {"wiener R.S. ", "Turbo","M","Mir", 1991,384},
    {"wiener R.S. ", "Turbo","M","Mir", 1991,384},
    {"wiener R.S. ", "Turbo","M","Mir", 1991,384},
    {"wiener R.S. ", "Turbo","M","Mir", 1991,384},
};
int main()
{
    record* begin = nullptr;    
    record* prev = nullptr;
    
    int n = sizeof(books)/sizeof(card);
 
    for (int i = 0; i!=n; ++i)
    {
        record* ptr = new record(books[i]);
        
        if (begin == nullptr)
        {
            begin = ptr;
            prev = ptr;
        }
        else
        {
            prev->next = ptr;
            ptr->prior = prev;
            prev = ptr;
        }
    }
 
    record* list = begin;
    cout<<'\n';
    while (list)
    {
        printbook (list->book);
        list =  list->next;
    }
    system("pause");
    return 0;
}
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
07.09.2012, 23:01 9
Цитата Сообщение от Андрей979 Посмотреть сообщение
при отладке шаг за шагом в правой части все значения есть
если ты отлаживал, то никак не мог не заметить, что n, которая управляет циклом, неправильная
0
0 / 0 / 0
Регистрация: 21.10.2011
Сообщений: 22
08.09.2012, 00:05  [ТС] 10
Цитата Сообщение от I.M. Посмотреть сообщение
Немного поправил
Спасибо, теперь стало работать
0
08.09.2012, 00:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2012, 00:05
Помогаю со студенческими работами здесь

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

Написать программу, которая выводит на экран список учащихся, у которых стипендия меньше заданного значения
Написать программу, которая выводит на экран список учащихся, у которых стипендия меньше заданного...

имеется пронумерованный список деталей 1)шуруп 2)гайка 3)винт 4)гвоздь 5)болт Составь программу которая по номеру детали выводит на экран ее названия
имеется пронумерованный список деталей 1)шуруп 2)гайка 3)винт 4)гвоздь 5)болт Составь программу...

Программа безоста*новочно выводит на экран сообщение “Не хочу вам помогать!”, прокручивая экран вверх.
Всем доброго время суток! При нажатии клавиши F1 программа очищает экран и безоста*новочно...


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

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

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