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

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

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

Почему массив инициализируется с 7-ю элементами?.. - C++

09.04.2012, 14:26. Просмотров 418. Ответов 9
Метки нет (Все метки)

Друзья! Требуется помощь

Задача: вводим денежную сумму в формате $123,321,442 , выбираем из нее цифорки и записываем в переменную типа unsigned long double.

Проблема: массив в который записываются только цифры (у меня это массив arr) инициализируется с 7-ю элементами, из-за этого все рушится... почему так происходит?

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
#include<iostream>
#include<iomanip>
using namespace std;
 
const int MAX = 100;
 
class Money
{
private:
 
    long unsigned double money;
    char str[MAX];
    char arr[MAX];
 
public:
 
    Money(): money(0)
    {}
 
    void setStr()
    {
        cout << "Input amount: ";
        cin >> setw(MAX) >> str;
    }
 
    void setMoney()
    {
        // filter numbers
        int j, i = -1;
        for (j = 0; j < strlen(str); j++)
        {
            if (str[j] == '0' || str[j] == '1' || str[j] == '2' || str[j] == '3' || str[j] == '4' || str[j] == '5' || str[j] == '6' || str[j] == '7' || str[j] == '8' || str[j] == '9' )
            {
                i++;
                arr[i] = str[j];
            }
        }
 
        // create double
        unsigned long double mul = 1;
        int k = 0, m = 0;
        for(j = 0; j <= i; j++)
        {
            k = strlen(arr) - j;
 
            // 10^... generator
            for (m = 1; m < k; m++)
                mul *= 10;
 
            money += (static_cast<int>(arr[j]) - 48) * mul;
        }
        cout << money << endl;
        system("pause");
    }
 
};
 
int main()
{
    Money m1;
    m1.setStr();
    m1.setMoney();
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2012, 14:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему массив инициализируется с 7-ю элементами?.. (C++):

Почему массив изначально нулями не инициализируется? - C++
Всем доброго вечера. Имеется проблема такая проблема: есть массив, в котором количество элементов должно менять при выполнении условия. Я...

Почему не инициализируется вектор размером 10? - C++
Хотел создать вектор размером 10, но visual studio выдаёт ошибку и при этом размер вектора равен 0, хотя я явно указал, что должно быть 10:...

Не инициализируется массив - C++
Мужики помогите, ошибка какая-то. Работаю в visual studio 2008 express SP2 Вот кусок кода: #define JE 122 ... float...

Не инициализируется динамический одномерный массив - C++
#include &quot;stdafx.h&quot; int _tmain(int argc, _TCHAR* argv) { int n = 10; float *a = new float; return 0; } После объявления...

Чем по умолчанию инициализируется символьный массив? - C++
если '/0' конец массива, то что представляют собой остальные??

Массив: найти номера столбцов с положительными элементами и записать их в одномерный массив - C++
ввести двумерный массив I . найти номера столбцов с положительными элементами и записать их в одномерный массив, отобразить его на экране. ...

9
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
09.04.2012, 14:29 #2
C++
1
if (str[j] == '0' || str[j] == '1' || str[j] == '2' || str[j] == '3' || str[j] == '4' || str[j] == '5' || str[j] == '6' || str[j] == '7' || str[j] == '8' || str[j] == '9' )
куда логичнее
C++
1
if (isdigit(str[j]))
1
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
09.04.2012, 17:57  [ТС] #3
Цитата Сообщение от ForEveR Посмотреть сообщение
куда логичнее
C++
1
if (isdigit(str[j]))
да, спасибо

Добавлено через 1 час 56 минут
Вобщем ввожу $1233:
Почему массив инициализируется с 7-ю элементами?..
А в массиве откуда-то появляется 7 элементов...
Почему массив инициализируется с 7-ю элементами?..

Почему так?.. Всю голову уже сломал..
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
09.04.2012, 18:04 #4
Цитата Сообщение от daite_dve Посмотреть сообщение
Почему так?.. Всю голову уже сломал..
конец строки надо '\0'
0
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
09.04.2012, 18:05  [ТС] #5
Цитата Сообщение от Nekto Посмотреть сообщение
конец строки надо '\0'
А поподробней
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
09.04.2012, 18:06 #6
Цитата Сообщение от daite_dve Посмотреть сообщение
А поподробней
C++
1
2
3
4
5
6
7
8
9
10
        // filter numbers
        int j, i = -1;
        for (j = 0; j < strlen(str); j++)
        {
            if (str[j] == '0' || str[j] == '1' || str[j] == '2' || str[j] == '3' || str[j] == '4' || str[j] == '5' || str[j] == '6' || str[j] == '7' || str[j] == '8' || str[j] == '9' )
            {
                i++;
                arr[i] = str[j];
            }
        }
добавить
C++
1
arr[i+1]='\0';
1
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
09.04.2012, 18:18  [ТС] #7
Цитата Сообщение от Nekto Посмотреть сообщение
добавить
C++
1
arr[i+1]='\0';
Спасибо! Заработало! А почему так? Это мы как бы обозначаем закрывающий элемент. Мол все что до него - то элементы, а он последний закрывающий? Зачем это?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
09.04.2012, 18:19 #8
daite_dve, Особенность представления строк в Си.
1
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
09.04.2012, 18:22  [ТС] #9
А почему в случае с первым массивом ( str[j] ) этого делать не надо?
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
09.04.2012, 18:25 #10
daite_dve, Ввод из потока автоматически добавляет 0 к концу
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2012, 18:25
Привет! Вот еще темы с ответами:

Дан массив A[N]. заполнить массив В[N] элементами массива A[N], которые удовлетворяют двойному неравенству - C++
Дан массив A. заполнить массив В элементами массива A, которые удовлетворяют двойному неравенству: A&lt; A или A&lt; A. Незаполненные элементы...

Дан массив А(n). Создать новый массив, элементами которого являются произведение A(i) на максимальный элемент массива A. - C++
Дан массив А(n). Создать новый массив, элементами которого являются произведение A(i) на максимальный элемент массива A. Элементы массива...

Почему возможно задать массив с размером -1 (почему такое вообще компилируется)? - C++
Всем привет. Долгое время не писал на плюсах, решил пройтись по основам, вспомнить. По непонятным для меня причинам этот код...

Дан массив A(N). Сформулировать массив B(M), элементами которого являются большие из двух рядом стоящих в массиве A чисел - C++
Нужен код программы. Помогите даме пожалуйста.


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
09.04.2012, 18:25
Ответ Создать тему
Опции темы

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