Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2011, 20:55   #1
VIPchk
 
Регистрация: 15.03.2011
Сообщений: 8
Восклицание Задача на структуры!

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

ПОмогите пожалуста код кажется правильно но не работает:
Код:
#include <iostream>
#include <conio.h>
#include <string.h> 

struct  library {
        char avtor[10];
        char nazva[10];
        char vudavnutstvo[20];
        int rik;      
       } book[3] ;
       
       using namespace std;
       int main() {  system ("cls");
       
       int i;
       char *avtor1;
       cout << " vvedit avtor, nazva knuhu,rik vupysky,vudavnutstvo" << endl;
        
      for (i=0;i<3;i++) 
       cin >> book[i].avtor >> book[i].nazva >> book[i].rik >> book[i].vudavnutstvo;
           
        for (i=0;i<3;i++)
        cout << book[i].avtor << ' ' << book[i].nazva << ' '<< book[i].rik << ' ' << book[i].vudavnutstvo << endl;
        
        cout << " vvedit avtora" << endl; 
       gets(avtor1);
        
       
        
        for (i=0;i<3;i++){
        if (strcmp(avtor1,book[i].avtor)==0)  cout << ' ' << book[i].nazva;}
         
           
           getch();
           }
спасибо!
VIPchk вне форума Ответить с цитированием
Старый 04.04.2011, 21:02   #2
101
 
Регистрация: 04.04.2011
Сообщений: 4
По умолчанию

Что именно работает неправильно? Пишите подробнее, будем смотреть.
101 вне форума Ответить с цитированием
Старый 04.04.2011, 21:07   #3
VIPchk
 
Регистрация: 15.03.2011
Сообщений: 8
По умолчанию

не работает вот етот отрезок програми:

Код:
  
        cout << " vvedit avtora" << endl; 
       gets(avtor1);
        
       
        
        for (i=0;i<3;i++){
        if (strcmp(avtor1,book[i].avtor)==0)  cout << ' ' << book[i].nazva;}
компилятор выбивает
почему то на етом отрезке!
VIPchk вне форума Ответить с цитированием
Старый 04.04.2011, 23:35   #4
101
 
Регистрация: 04.04.2011
Сообщений: 4
По умолчанию

Ошибку то какую пишет компилятор?
101 вне форума Ответить с цитированием
Старый 04.04.2011, 23:55   #5
mikillskegg
Пользователь
 
Регистрация: 02.04.2011
Сообщений: 36
По умолчанию

Мне кажется, надо переменную avtor1 сделать не указателем на char, а массивом чаров, например:
Код:
char avtor1 [10];
mikillskegg вне форума Ответить с цитированием
Старый 04.04.2011, 23:57   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы правы, ибо указатель сам по себе не выделит память.
вот у ТС gets и пишет куда попало(обычно в null)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.04.2011, 00:15   #7
VIPchk
 
Регистрация: 15.03.2011
Сообщений: 8
По умолчанию

спасибо!
VIPchk вне форума Ответить с цитированием
Старый 05.04.2011, 00:39   #8
101
 
Регистрация: 04.04.2011
Сообщений: 4
По умолчанию

Кстати, поиском почему не пользуетесь. Не знаю именно ваша программа это или нет, но вот подобная реализация структуры

А вообще, по сабжу скажу, что вот этого

Код:
char *avtor1;
делать не надо

Кстати, ошибку то вы свою так и не указали. В вашем случае не компилятор должен выбивать...
101 вне форума Ответить с цитированием
Старый 05.04.2011, 01:25   #9
VIPchk
 
Регистрация: 15.03.2011
Сообщений: 8
По умолчанию

компилятор ошибки то не видает, только когда после вода даних просто выбивает почему то .Кстати пользуюсь Dev-C++???
Большое спасибо за ответ!

Последний раз редактировалось VIPchk; 05.04.2011 в 01:29.
VIPchk вне форума Ответить с цитированием
Старый 05.04.2011, 01:50   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

почему то?
вторая строка моего прошлого поста, я ответил почему.

указатель должен куда то указывать, он хранит лишь адрес, но за данные по этому адресу он не отвечает, это ваша забота чтоб инициализировать указатель.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на структуры hunter08923 Общие вопросы C/C++ 5 04.04.2011 19:26
Задача на «файлы и структуры» в Visual С++ Alex007 Помощь студентам 5 10.12.2009 21:25
Задача на структуры с сортировкой на С++ Many man Помощь студентам 3 25.04.2009 10:32
Массивы и структуры в структурах (Задача в С++) bel_ka Общие вопросы C/C++ 4 16.12.2007 15:31