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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с вектором 
:(
    Опции темы
FTTA
Дата 11.2.2013, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть такой код:

Код

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

struct PARA
{
    char name[11];
    int value;
};
main()
{
char*p,*t;
int z;
int i=0;
vector<PARA> Spusok(3);
do
    {
    cout<<"\n Vvedit imja ta znachenna ,,name value,,\n";
    cin.get(p,20);
    t=strrchr(p,' ');
    Spusok[i].value=atoi(t);//--1--
    z=strlen(p)-strlen(t);
    strncpy(Spusok[i].name,p,z);//--2--
    i++;
    }
while(i<3);
return 0;
}


Когда програма уже выполняется, выдаётся ошибка access violation на строчку №22. Но когда сделать так Spusok[0].value=atoi(t); все работает
Подскажите пожалуйста в чем причина, или посоветуйте хорошую книжку по С++.

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

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



Код

struct PARA
{
    char name[11];
    int value;
};

зачем изобретать велосипед, если есть std::pair http://cplusplus.com/reference/utility/pair/?kw=pair

Код

char*p,*t;
int z;

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

Код

cin.get(p,20);

http://cplusplus.com/reference/istream/istream/get/
A pointer to an array of characters where the string is stored as a c-string

Указатель, который передаётся в эту функцию, должен указывать на уже созданный массив, а ты предаёшь указатель, который указывает неизвестно куда (смотри пример использования по ссылке выше). Плюс указываешь длину читаемых символов 20, несмотря на то, что предполагается, что ты читаешь имя, длина которого 10 символов (11й на терминальный нуль).
Дальше не смотрел, но сначала это исправить бы.

И вообще, если уж используешь STL, лучше использовать его возможности, а не Си функции.

Как учебник могу рекомендовать Герберт Шилдт C++ базовый курс, издание 2010.


Это сообщение отредактировал(а) NoviceF - 11.2.2013, 18:23
PM MAIL   Вверх
korian
Дата 11.2.2013, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

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



Цитата(NoviceF @  11.2.2013,  17:20 Найти цитируемый пост)
зачем изобретать велосипед, если есть std::pair http://cplusplus.com/reference/utility/pair/?kw=pair

как раз в данном случае изобретать велосипед всегда имеет смысл. Я бы на самом деле std::pair нигде и никогда бы не использовал, кроме как для std::map. Хотя и в map я бы лучше вставил хрень с key/value полями, потому как я хочу знать по имени класса и по именам полей, что живет в этом классе, а не догадываться что такое first и что такое second.

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

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



Цитата(korian @  11.2.2013,  21:02 Найти цитируемый пост)
 я хочу знать по имени класса и по именам полей, что живет в этом классе


Сам контейнер может называться достаточно красноречиво, чтобы понять, что такое first и что такое second, но на истину не претендую, в промышленном масштабе пока ничего не делал )

Но в любом случае, автору есть над чем подумать.. взять хотя бы хидеры, имя класса,  поле name типа char, а не string..
PM MAIL   Вверх
borisbn
Дата 11.2.2013, 22:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



FTTA, весь ввод данных можно уложить в эти строки
Код
    cin >> Spusok[ i ].name >> Spusok[ i ].value;

итого получается
Код
#include <iostream>
#include <vector>
#include <string>
struct PARA {
    std::string name;
    int value;
};

int main() {
    int i = 0;
    std::vector<PARA> Spusok( 3 );
    do {
        std::cout<<"\n Vvedit imja ta znachenna ,,name value,,\n";
        std::cin >> Spusok[ i ].name >> Spusok[ i ].value;
        i++;
    }
    while ( i < 3 );
    return 0;
}


Это сообщение отредактировал(а) borisbn - 14.2.2013, 09:15


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 14.2.2013, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



borisbn, хидеры забыл приинклюдить. У ТС с его знаниями языка на уровне турбо с++ могут возникнуть проблемы.  smile 
PM   Вверх
borisbn
Дата 14.2.2013, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



bsa, подправил. и std:: добавил )


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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