Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
skorpions2000
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 6
#1

Работа с строкой (указатель на строку) - C++

15.02.2015, 02:59. Просмотров 351. Ответов 2
Метки нет (Все метки)

Написал такую программку которая будет в будущем подсчитывать количество продуктов, цены на отдельные продукты и цены общие.. с самого начала столкнулся с проблемой... как записать строку с клавиатуры, махинациями написал такой код (ниже). Но записывает в структуру только последнюю строку. Подскажите, где я допустил ошибку?

код:

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
91
92
93
94
95
#include "stdafx.h"
#include <conio.h>
#include <string>
#include <iostream>
 
using namespace std;
 
struct Pokupki
{
    char* Name;
    int kol;
    float cena;
    Pokupki* Next;
    Pokupki(char* Name, int kol, float cena, Pokupki* next = 0){
        this->Name = Name;
        this->kol = kol;
        this->cena = cena;
        this->Next = next;
    };
    ~Pokupki(){
 
    };
};
 
class calc{
    Pokupki* temp;
    Pokupki* head;
    
public:
    
    calc(){
        head = NULL;
    }
 
    void addTovar(char* Name, int kol, float cena){
        Pokupki* tmp = new Pokupki(Name, kol, cena);
        if (head != NULL){          
            temp->Next = tmp;   
        }
        else{
            head = tmp;
        }
            temp = tmp;
    }
 
    friend ostream& operator << (ostream &str, const calc& tmp); 
 
};
 
    ostream& operator << (ostream &str, const calc& tmp) {
        Pokupki* temp = tmp.head;
        int k=0;
        do{
            k++;
            str << "-----------------------------------" << endl
                << " Towar: " << k << endl
                << " Name:     \t" << temp->Name << endl
                << " Kolichestwo: \t" << temp->kol << endl
                << " Cena:     \t" << temp->cena << endl;
        } while (temp = temp->Next);
 
        return str << endl;
    };
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    
    int n, kol;
    float cena;
    char* Name;
    string str;
    
    cout << " Vvedi kol produktow: ";
    cin >> n;
 
 
    calc cal;
    for (int i = 0; i < n; i++){
        cout<< endl << "Nazwa: " ;  
        cin >> str; 
        cout << endl << "Koliczestwo: " ;
        cin >> kol;
        cout << endl << "Cena: ";
        cin >> cena;
 
        Name = &str[0];
        cal.addTovar(Name, kol, cena);
        }
    cout << cal << endl;
    
    system("pause");
 
    return 0;
}
результат работы программы:

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
 Vvedi kol produktow: 2
 
Nazwa: 66666
 
Koliczestwo: 233
 
Cena: 55
 
Nazwa: 333333
 
Koliczestwo: 22
 
Cena: 11
-----------------------------------
 Towar: 1
 Name:          333333
 Kolichestwo:   233
 Cena:          55
-----------------------------------
 Towar: 2
 Name:          333333
 Kolichestwo:   22
 Cena:          11
 
 
Для продолжения нажмите любую клавишу . . .
Добавлено через 49 минут
решил проблему вот таким способом:

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
int _tmain(int argc, _TCHAR* argv[])
{
 
    int n, kol;
    float cena;
    char* Name;
    
    cout << " Vvedi kol produktow: ";
    cin >> n;
 
 
    calc cal;
    for (int i = 0; i < n; i++){
        string *str = new string;
        cout<< endl << "Nazwa: " ;  
        cin >> *str;    
        cout << endl << "Koliczestwo: " ;
        cin >> kol;
        cout << endl << "Cena: ";
        cin >> cena;
 
        Name = &(*str)[0];
        cal.addTovar(Name, kol, cena);
        }
    cout << cal << endl;
    
    system("pause");
 
    return 0;
}
подскажите альтернативу, пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2015, 02:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Работа с строкой (указатель на строку) (C++):

Найти строку матрицы с максимальным нечетным элементом поменять эту строку местами с нулевой строкой - C++
дана квадратная матрица получаемых через rand() найти строку матрицы с максимальным нечетным элементом поменять эту строку местами с...

Найти строку матрицы с максимальным нечетным элементом поменять эту строку местами с нулевой строкой. - C++
помогите решить ззадачу дана квадратная матрица получаемых через rand() найти строку матрицы с максимальным нечетным элементом поменять...

Указатель на строку: как выводить не всю строку целиком, а конкретную букву - C++
Есть программка: #include&lt;iostream&gt; using namespace std; void fn_str1(int i,string str1,char *p) { p=&amp;str1; ...

Разработать и испытать функцию, которая переворачивает строку и возвращает указатель на перевёрнутую строку - C++
Разработать и испытать функцию, которая переворачивает строку и возвращает указатель на перевёрнутую строку. Прототип функции инверсии...

Работа с файлом (передать указатель на файл в функцию, вернуть указатель на файл из функции) - C++
Подскажите как передать указатель на файл в функцию, как вернуть указатель на файл из функции. void Open() // из этой функции вернуть...

Какая функция сравнивает строку s2 со строкой s1? - C++
Какая функция сравнивает строку s2 со строкой s1?

2
nmcf
6198 / 5509 / 1929
Регистрация: 14.04.2014
Сообщений: 23,130
15.02.2015, 08:10 #2
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
struct Pokupki
{
    char* Name;
    int kol;
    float cena;
    Pokupki* Next;
    Pokupki(char* Name, int kol, float cena, Pokupki* next = 0){
        this->Name = new char[strlen(Name) + 1];
        strcpy(this->Name, Name);
        this->kol = kol;
        this->cena = cena;
        this->Next = next;
    };
    ~Pokupki(){
        delete[] Name;
    };
};
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    int n, kol;
    float cena;
    char Name[100];
    
    cout << " Vvedi kol produktow: ";
    cin >> n;
 
 
    calc cal;
    for (int i = 0; i < n; i++){
        cout<< endl << "Nazwa: " ;  
        cin.getline(Name, 100);    
        cout << endl << "Koliczestwo: " ;
        cin >> kol;
        cout << endl << "Cena: ";
        cin >> cena;
        cin.get();
 
        cal.addTovar(Name, kol, cena);
        }
    cout << cal << endl;
    
    system("pause");
 
    return 0;
}
1
skorpions2000
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 6
16.02.2015, 03:41  [ТС] #3
Посоветуйте хорошую книгу, наверняка вы что-то читали хорошее по программированию. Нужно как-то расширить свой кругозор, какой-то задачник может. (Знаю базу, и этим оперирую.) Если что-то есть конечно. Спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2015, 03:41
Привет! Вот еще темы с ответами:

Строку матрицы с минимальным элементом поменять со строкой с максимальным - C++
не получается поменять местами строку в которой находится минимальный элемент на строку в которой находится максимальный элемент....

Перед строкой матрицы с номером вставить строку из нулей - C++
Дана матрица размера МхN и целое число К (1&lt;=K&lt;=M). Перед строкой матрицы с номером вставить строку из нулей.

Указатель на строку - C++
Доброго времени суток. У меня вопрос по поводу *char К примеру у меня есть функция void get(char *s1) { s1=&quot;hello&quot;; } ...

Указатель на строку - C++
Хочу считать строку какой угодно длины, ограниченной разве памятью компа.Затем надо получить указатель на эту строку, чтоб работать, как...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru