Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите найти ошибку. Указатели, Структура 
V
    Опции темы
Samuele
Дата 23.11.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



В общем суть программы я думаю поймете из кода, если что-то будет не понятно конечно уточню.
Беда в том что перечитал уже много тем и пару книжек по данной теме и вроде бы правильно все сделал, но как обычно это бывает на начальном уровне работает не верно. А точнее говорю вместе вводимых в струтуру данных выводится какая-то ерунда  smile 
Код

#include <iostream.h>
#include <conio.h>

typedef struct cars
{
    char name[30];
    int year;
} ;


int main()
{    int i, n;

    cout<<"How many cars do you wish to catalog?";
    cin>>n;

    cars *p_car = new cars [n];
    car pp_car=p_car;
    for (i = 0; i < n; i++)
    {   cout<<"Car #"<<i+1<<':'<<endl;
        cout<<"Please enter the make: ";
        cin>>p_car->name;
        cout<<"Please enter the year made: ";
        cin>>p_car->year;
        p_car++;
    }

    p_car=pp_car;
    cout<<"Here is your collection:"<<endl;;
    for (i = 0; i < n; i++)
        {
        cout<<p_car->year<<' '<<p_car->name;
        p_car++;
        }

    getch();
    return 0;
}



заранее благодарю.
PM MAIL   Вверх
A5uKa
  Дата 23.11.2010, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 2
Всего: 16



struct cars Больше похожа на struct car , то есть немного не понимаю как вы тут хотите работать с массивом таких структур.

хотя может конеяно это я чего-то не понимаю.

Добавлено через 1 минуту и 20 секунд
по крайней мере я в таких случаях использую векторы typedef std::vector<car*> cars;
PM   Вверх
Samuele
Дата 23.11.2010, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



а какая разница назвать структуру cars или car?? думаю это не столь принципиально..суть в том что мне через указатель надо заполнять массив типа car с его полями..надеюсь правильно и понятно все объяснил...
PM MAIL   Вверх
A5uKa
  Дата 23.11.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 2
Всего: 16



Цитата(Samuele @ 23.11.2010,  12:25)
а какая разница назвать структуру cars или car?? думаю это не столь принципиально..суть в том что мне через указатель надо заполнять массив типа car с его полями..надеюсь правильно и понятно все объяснил...

Разницы никакой ... Но твоя структура описывает одну машину. Это путает немного.

а где у тебя массив типа кар ?
cars *p_car = new cars [n]; - это я вообще, честно говоря, не знаю что такое.

даже если сделать cars ** поучится своеобразный бред (хотя у меня были попытки), но всё же мне кажется векторы тут приминимы как минимум  smile

Добавлено через 2 минуты и 44 секунды
 smile 
Это ведь тупилдер ?  smile 
PM   Вверх
Samuele
Дата 23.11.2010, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



векторы мне не известны...и к ним пока не хочу прикасаться...

cars *p_car= new cars [n]; //выделение динамической памяти под массив потому что я не знаю сколько машин будет описано в итоге.


 smile  может и тупилдер smile 


Это сообщение отредактировал(а) Samuele - 23.11.2010, 12:46
PM MAIL   Вверх
Crafty
Дата 23.11.2010, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



Что это за строчка такая 
Код

 car pp_car=p_car;
?

Должно быть так 
Код

 cars* pp_car=p_car;


Добавлено @ 12:56
ну и 
Код

delete [] pp_car;
 добавьте.

А чтобы не было мусора используйте string, или если используете строки в стиле Си, то считывайте их через cin.get(p_car->year, 30);

Это сообщение отредактировал(а) Crafty - 23.11.2010, 13:09
PM MAIL   Вверх
Samuele
Дата 23.11.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



Crafty, это для того что бы помнить начала динамического массива.

вот в общем текст самой задачи...

6. Разработайте структуру под названием саr, в которой хранится
следующая информация об автомобиле: его марка в виде строки в
символьном массиве, а также год его выпуска в виде целого числа.
Напишите программу, которая запрашивает пользователя,
сколько автомашин следует ввести в каталог. Затем программа
должна использовать метод new для создания нового
динамического массива в соответствии с указанным количеством
структур саr. Далее она должна выдать приглашение на ввод со
стороны пользователя марки (которая может состоять из
нескольких слов) и года выпуска автомашины для каждой
структуры. Следует заметить, что этот процесс требует
некоторого внимания, поскольку при этом поочередно
осуществляется чтение строковых и числовых данных. И наконец,
программа должна отображать содержимое каждой структуры.
Результат выполнения такой программы должен выглядеть
следующим образом:
How many cars do you wish to catalog? 2
Car #1:
Please enter the make: Hudson Hornet
Please enter the year made: 1952
Car #2:
Please enter the make: Kaiser
Please enter the year made: 1951
Here is your collection:
1952 Hudson Hornetu
1951 Kaiser
PM MAIL   Вверх
Crafty
Дата 23.11.2010, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



Цитата(Samuele @  23.11.2010,  13:07 Найти цитируемый пост)
это для того что бы помнить начала динамического массива.
 это понятно, но почему ты хранишь его не в указателе?

PM MAIL   Вверх
Samuele
Дата 23.11.2010, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



хорошо, исправил на
Код

cars* pp_car=p_car;


но это явно не конец моих мучений с этой прогой...я чувствую что где то допустил тупую ошибку но понять где опыта не хватает...((
PM MAIL   Вверх
Crafty
Дата 23.11.2010, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



Код

#include <iostream>

using namespace std;

typedef struct cars
{
    char name[30];
    int year;
} ;
int main()
{    int i, n;
    cout<<"How many cars do you wish to catalog?";
    cin>>n;
    cars *p_car = new cars [n];
    cars *pp_car=p_car;
    for (i = 0; i < n; i++)
    {   
        cout<<"Car #"<<i+1<<':'<<endl;
        cout<<"Please enter the make: ";
        cin.ignore(256,' ');
        cin.getline(p_car->name,30);
        cout<<"Please enter the year made: ";
        cin>>p_car->year; 
        p_car++;
    }
    p_car=pp_car;
    cout<<"Here is your collection:"<<endl;;
    for (i = 0; i < n; i++)
    {
        cout<<p_car->year<<' '<<p_car->name<<endl;
        p_car++;
    }
    return 0;
}


Добавлено @ 13:38
Тут можно про ф-ции почитать
http://www.cplusplus.com/reference/iostream/istream/ignore/
http://www.cplusplus.com/reference/iostream/istream/getline/

Это сообщение отредактировал(а) Crafty - 23.11.2010, 13:39
PM MAIL   Вверх
Samuele
Дата 23.11.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



может вопрос покажется странным...но вы пробовали у себя данный код? просто я его тупо скопипастил а толку ноль...
PM MAIL   Вверх
Crafty
Дата 23.11.2010, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



Samuele, да у меня работает всё, у вас просто компилятор старый.

Добавлено через 1 минуту и 8 секунд
как-то так в старом
Код

#include <iostream.h>

typedef struct cars
{
    char name[30];
    int year;
} ;
int main()
{    int i, n;
    cout<<"How many cars do you wish to catalog?";
    cin>>n;
    cars *p_car = new cars [n];
    cars *pp_car=p_car;
    for (i = 0; i < n; i++)
    {   
        cout<<"Car #"<<i+1<<':'<<endl;
        cout<<"Please enter the make: ";
        cin.ignore(256,' ');
        cin.getline(p_car->name,30);
        cout<<"Please enter the year made: ";
        cin>>p_car->year; 
        p_car++;
    }
    p_car=pp_car;
    cout<<"Here is your collection:"<<endl;;
    for (i = 0; i < n; i++)
    {
        cout<<p_car->year<<' '<<p_car->name<<endl;
        p_car++;
    }
    return 0;
}

PM MAIL   Вверх
Samuele
Дата 23.11.2010, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



не думаю что CodeGear 2007 можно назвать старым компилятором))
спасибо за помощь.
PM MAIL   Вверх
Crafty
Дата 23.11.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



Цитата(Samuele @  23.11.2010,  14:06 Найти цитируемый пост)
не думаю что CodeGear 2007 можно назвать старым компилятором))

Можно если он не переваривает код последнего стандарта (2003 года).

PM MAIL   Вверх
Samuele
Дата 23.11.2010, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 11.11.2010

Репутация: нет
Всего: нет



код он переваривает, ошибок не выдает. но вот результат не верный выдает. и кто бы знал в чем причина...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0617 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.