Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
skorpions2000
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 6
#1

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

15.02.2015, 02:59. Просмотров 360. Ответов 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
Ответы с готовыми решениями:

Чем отличаются указатель на строку и константный указатель на строку?
Просто обьясните, как такое возможно? char *a=&quot;fff&quot;; В чем отличие от этого?...

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

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

Указатель на строку: как выводить не всю строку целиком, а конкретную букву
Есть программка: #include&lt;iostream&gt; using namespace std; void fn_str1(int...

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

2
nmcf
6259 / 5571 / 2531
Регистрация: 14.04.2014
Сообщений: 23,456
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

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

Элемент двусвязного списка содержит указатель на строку. Вставить строку в конец списка
Элемент двусвязного списка содержит указатель на строку. Вставить строку в...

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


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

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

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