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

Правильное чтение символов в динам. массив - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Нулевые элементы http://www.cyberforum.ru/cpp-beginners/thread826618.html
Вот чем дело, допустим у нас есть 10 интов и надо определить есть ли нулевые, мы можем сделать так: flag=0; if(!first) flag=1; if(!second) flag=1; ... а можем так if(!(first && srcond && third &&....)) flag=1; но если на м надо определить из 10....20..100 интов кол-во нулевых мы опять же можем сделать так:
C++ Вычислить сумму бесконечного ряда c точностью E Всем доброй ночи, добрые программисты! Я учусь на специальности радиоаппаратостроение, а нам впихнули программирование на С++, а я с Паскалем мучалась огого сколько, а тут еще это! Задачки не сложные, но я вообще логики понять не могу! Спасите! 2)Вычислить сумму бесконечного ряда c точностью E=0.0001 S=1+1/2∙x^2+1/2∙3/4∙x^4+1/2∙3/4∙5/6∙x^6+⋯ |x|<1 Сравнить полученное значение с ... http://www.cyberforum.ru/cpp-beginners/thread826613.html
C++ Определить функцию нахождения расстояния между точками.
Возник вопрос с функцией! Определить функцию нахождения расстояния между точками. Во множестве точек на плоскости найти пару точек с максимальным расстоянием между ними.
недетриминированные алгоритмы (графы. Является ли сгенерированная раскраска допустимой) C++
составить алгоритм, проверяющий является ли сгенерированная раскраска допустимой (граф задать самостоятельно).
C++ Каков будет порядок элементов списка[6, 2, 4, 7, 1, 3, 8, 5] после построения пирамиды http://www.cyberforum.ru/cpp-beginners/thread826602.html
Написать программу реализующую сортировку вставками элементов выборки N чисел (использовать любой язык программирования). Проведите анализ наихудшего и среднего случаев. Написать программу реализующую пузырьковую сортировку элементов выборки N чисел (использовать любой язык программирования).
C++ Организация общения между классами Использую следующую конструкцию. Есть общий класс , назовем его ядро(Core) от него идут 2 след класса Graphics и Data. Задача следующая нужно, чтобы класс Graphics мог получать данные от Data. В главном классе Core я создаю указатели на классы Graphics и Engine, а также в конструкторе(core) создаю объекты данных классов. В классе Graphics создаю указатель на класс Data. И в конструкторе Graphics... подробнее

Показать сообщение отдельно
tramp_1-3
 Аватар для tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
04.04.2013, 11:23  [ТС]     Правильное чтение символов в динам. массив
Цитата Сообщение от Tulosba Посмотреть сообщение
tramp_1-3, закиньте все исходники. Не очень понятно в какой момент ошибка возникает.
P.S. оператор= должен возвращать ссылку (Cow&)
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
#include "cow.h"
#include <iostream>
void SomeFunc (Cow obj);
int main () {
    using std::cin;
    using std::cout;
    cout << "Cow's name: ";
    char * name = new char [Cow::length];
    cin.get (name, Cow::length);
    cin.ignore (1);
    cout << "Hobby: ";
    char * ho = new char [Cow::length];
    cin.get (ho, Cow::length);
    cout << "Weight: ";
    double weight;
    cin >> weight;
    Cow * first = new Cow (name, ho, weight);
    first->ShowCow ();
    cout << "Create another object by default\n";
    Cow second;
    second.ShowCow ();
    cout << "Assignment fist to second\n";
    second = *first;
    second.ShowCow ();
    cout << "Passing object by value\n";
    SomeFunc (second);
    system ("pause");
    delete [] ho;
    delete [] name;
    return 0;
};
void SomeFunc (Cow obj) {
    std::cout << "That's in function: \n";
    obj.ShowCow ();
};
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
#include "cow.h"
#include <iostream>
#include <cstring>
Cow::Cow () {
    std::strcpy (name, "Default cow");
    char * hobby = new char [Cow::length];
    std::strcpy (hobby, "Do nothing");
    weight = 0;
};
Cow::Cow (const char * nm, const char * ho, double wt) {
    std::strcpy (name, nm );
    char * hobby = new char [Cow::length];
    std::strcpy (hobby, ho );
    weight = wt;
};
Cow & Cow::operator= (const Cow & c) {
    if (this == &c) 
        return *this;
    std::strcpy (name, c.name);
    delete [] hobby;
    char * hobby = new char [Cow::length];
    std::strcpy (hobby, c.hobby);
    weight = c.weight;
    return *this;
};
Cow::Cow (const Cow & c) {
    std::strcpy (name, c.name);
    delete [] hobby;
    char * hobby = new char [Cow::length];
    std::strcpy (hobby, c.hobby);
    weight = c.weight;
};
Cow::~Cow () {
    name [0] = '\0';
    delete [] hobby;
    weight = 0;
};
void Cow::ShowCow () {
    std::cout << name << " likes " << *hobby << " and weights " << weight << '\n';
};
Добавлено через 1 минуту
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
tramp_1-3, закиньте все исходники. Не очень понятно в какой момент ошибка возникает.
P.S. оператор= должен возвращать ссылку (Cow&)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Cow {
public:
    const static int length = 20;
    Cow ();
    Cow (const char * nm, const char * ho, double wt);
    Cow (const Cow & c);
    ~Cow ();
    Cow & operator= (const Cow & c);
    void ShowCow ();
private:
    char name [length];
    char * hobby ;
    double weight;
};
Добавлено через 5 минут
Цитата Сообщение от IrineK Посмотреть сообщение
На будущее: исходниками с такими ошибками никто не сможет воспользоваться и они превращаются в мусор даже при хорошем уровне разработки.
жаль, я думал что невинная буква режет глаз меньше, чем переменные под понятными и красноречивыми названиями Peremrnnaya100500 или Summa9000.

Добавлено через 18 минут
Ошибку нашел - в методах память под строки надо выделять так
C++
1
hobby = new char [Cow::length];
правда, другие вылезли

Добавлено через 22 часа 1 минуту
Если кому-то интересно, то вот полностью рабочие исходники:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
class Cow {
private:
    int length;
    char  name [20] ;
    char * hobby ;
    double weight;
public:
    Cow ();
    Cow (const char *, const char *, double);
    Cow (const Cow &);
    ~Cow ();
    Cow & operator= (const Cow &);
    friend std::ostream & operator << (std::ostream &, const Cow &);
};
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
#include "cow.h"
#include <cstring>
Cow::Cow () {
    strcpy (name, "Default cow");
    length = strlen ("Default action");
    hobby = new char [length + 1];
    strcpy (hobby, "Default action");   
    weight = 0;
};
Cow::Cow (const char  nm [], const char * ho, double wt) {
    std::strcpy (name, nm );
    length = strlen (ho);
    hobby = new char [length + 1];
    strcpy (hobby, ho );
    weight = wt;
};
Cow & Cow::operator= (const Cow & c) {
    if (this == &c) 
        return *this;
    strcpy (name, c.name);
    delete [] hobby;
    length = strlen (c.hobby);
    hobby = new char [length + 1];
    strcpy (hobby, c.hobby);
    weight = c.weight;
    return *this;
};
Cow::Cow (const Cow & c) {
    strcpy (name, c.name);
    length = strlen (c.hobby);
    hobby = new char [length + 1];
    strcpy (hobby, c.hobby);
    weight = c.weight;
};
Cow::~Cow () {
    name [0] = '\0';
    delete [] hobby;
    weight = 0;
};
std::ostream & operator << (std::ostream & os, const Cow & c) {
    std::cout << c.name << " likes ";
    for (int i = 0; i < c.length; i++)
        std::cout.put (c.hobby [i]);
    std::cout << " and weights " << c.weight << '\n';
    return os;
};
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
#include "cow.h"
#include <iostream>
void SomeFunc (Cow obj);
int main () {
    using std::cin;
    using std::cout;
    cout << "Cow's name: ";
    char * name = new char [20];
    cin.get (name, 20);
    cin.ignore (1);
    cout << "Hobby: ";
    char * ho = new char [20];
    cin.get (ho, 20);
    cout << "Weight: ";
    double weight;
    cin >> weight;
    Cow * first = new Cow (name, ho, weight);
    cout << *first;
    cout << "Create another object by default\n";
    Cow second;
    cout << second;
    cout << "Assignment fist to second\n";
    second = *first;
    cout << second;
    cout << "Passing object by value\n";
    SomeFunc (second);
    system ("pause");
    delete [] ho;
    delete [] name;
    delete first;
    return 0;
};
void SomeFunc (Cow obj) {
    std::cout << "That's in function: \n" << obj << '\n';
};
 
Текущее время: 18:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru