Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
1

Ошибка при вызове функции

08.08.2012, 17:12. Показов 1429. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В функции NewWords вызывается функция correct,при отладке я не могу войти в эту функцию,к тому же потом не выводится элементы объекта класса words и ID
в программе на данный момент вызываются лишь 2 функции,которые я привёл
класс Dictionary
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef DICTIONARY_H
#define DICTIONARY_H
#include "StdAfx.h"
 
class Dictionary
{
    public:
    
    Dictionary(char *nameOfFile = NULL,int Amount = 0);
 
    bool NewWords();
    void correct(string id);
    bool LoadID();
    bool WriteID(int);
 
    char *NameOfFile;
    int Amount;
    vector<string> words;
    vector<string> ID;
};
#endif DICTIONARY_H

NewWords
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
bool Dictionary::NewWords()
{
    setlocale(0,"");
 
    cout << "Введите:" << endl;
    cout << "1 - для добавления нового слова" << endl;
    cout << "0 - для выхода из программы" << endl;
 
    bool choise = false;
    bool repeat = false;
 
    string word;
    string id_of_word;
 
 
    cin >> choise;
 
            while(choise)
            {
                cout << "Введите слово" << endl;
 
                cin >> word;
                cout << "Введите ID:" << endl;
                if(!repeat)
                {
                cout << "Значения должны быть в диапазоне от 0 до 255" << endl;
                cout << "Пример:125.0.12.369" << endl;
                repeat = true;
                }
 
                cin >> id_of_word;
 
                id_of_word += ".";
 
                correct(id_of_word);
            
                this->words.push_back(word);
 
                this->Amount++;
 
                cout << "Введите:" << endl;
                cout << "1 - для добавления нового слова" << endl;
                cout << "0 - для выхода из режима записи слов" << endl;
 
                cin >> choise;
            }
 
        return true;
}

correct
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
void Dictionary::correct(string id)
{
    int digit = 0;
    int temp;
    int degree;
    int position = 0;
    string Temp_ID;
 
    for(unsigned int i = 0;i < id.size();i++)
        if(id.at(i) == '.')
        {
            if(position == 0)
            {
                degree = i-1;
 
                for(unsigned int k = position;k < i;k++)
                {
                    temp = id.at(k);
                    digit += temp*pow(10.0,degree);
                    degree--;
                }
 
                Temp_ID += digit;
                Temp_ID += ".";
 
                digit = 0;
                position = i + 1;
            }
            else
            {
                degree = i - position - 1;
 
                for(unsigned int k = position;k < i;k++)
                {
                    temp = id.at(k);
                    digit += temp*pow(10.0,degree);
                    degree--;
                }
 
                Temp_ID += digit;
                Temp_ID += ".";
 
                digit = 0;
                position = i + 1;
            }
        }
 
 
    this->ID.push_back(Temp_ID);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2012, 17:12
Ответы с готовыми решениями:

Ошибка при вызове функции
Добрый день! Есть функция по расчету детерминанта int _det(int size,double **arr,double &amp;det) {...

Ошибка при вызове функции
Ошибка в строке 90, при пошаговом выполнении она появляется при вызове функции, до захода в нее,...

GCC ошибка при вызове функции
Здравствуйте. Проблема в следующем: при вызове функции sub из тела add выдается ошибка....

Ошибка компиляции при вызове функции strcpy
Подскажите пожалуйста чего он ругается

6
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.08.2012, 20:45 2
Цитата Сообщение от alexey31415 Посмотреть сообщение
при отладке я не могу войти в эту функцию
Что это значит? У меня ваш код работает. Функция correct срабатывает. words и ID выводятся. ID выводится неправильно.
Миниатюры
Ошибка при вызове функции  
0
67 / 67 / 9
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.08.2012, 20:58 3
А что вообще должна делать эта функция correct()? В частности, этот код:
C++
1
2
3
4
5
6
for(unsigned int k = position;k < i;k++)
{
   temp = id.at(k);
   digit += temp*pow(10.0,degree);
   degree--;
}
А то я мелкими преобразованиями уже свёл весь код функции до:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Dictionary::correct(string id)
{
    int position = 0;
    string Temp_ID;
 
    for(unsigned int i = 0;i < id.size();i++)
        if(id.at(i) == '.')
        {
                for(unsigned int k = position;k < i;k++)
                {
                    Temp_ID += id.at(k);
                }
                Temp_ID += ".";
                position = i + 1;
        }
    ID.push_back(Temp_ID);
}
То есть это можно уже упростить до
C++
1
2
3
4
void Dictionary::correct(string id)
{
    ID.push_back(id);
}

Не по теме:

P.S. В качестве примера указан 125.0.12.369 . Разве 369 входит в диапазон от 0 до 255?

1
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.08.2012, 21:06 4
Прежний ваш вариант correct(), насколько я помню, возвращал bool. Сейчас как проверяется корректность ввода ID?

Добавлено через 1 минуту
Цитата Сообщение от elivin Посмотреть сообщение
А что вообще должна делать эта функция correct()?
Определение значения переменной в цикле

Добавлено через 2 минуты
И мелкое:
C++
1
2
3
4
.............................................
cout << "Значения должны быть в диапазоне от 0 до 255" << endl;
                cout << "Пример:125.0.12.369" << endl;
........................................................................
369 не в диапазоне.
1
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
08.08.2012, 21:45  [ТС] 5
Цитата Сообщение от elivin Посмотреть сообщение
for(unsigned int k = position;k < i;k++)
{
* *temp = id.at(k);
* *digit += temp*pow(10.0,degree);
* *degree--;
}
например,я ввёл 125.2.0.0
теперь в этом коде(когда найдена первая точка) я беру 1 и умножаю её на 10 в степени 2,потом 2 на 10 в 1 степени и 5 на 10^0 и получаю число
Цитата Сообщение от elivin Посмотреть сообщение
Разве 369 входит в диапазон от 0 до 255?
то я написал случайно,конечно не в диапазоне

Цитата Сообщение от alsav22 Посмотреть сообщение
Сейчас как проверяется корректность ввода ID?
пока никак,пока нужно,чтоб код работал

Добавлено через 3 минуты
до меня только дошло,что я делал неправильно,я пытался сделать то жечто и когда использовал char,а теперь нужно немного другое

Добавлено через 10 минут
спасибо elivin
теперь у меня такой вопрос,почему при отладке я не вхожу в функцию,а открывается файл xstring и почему у меня не выодятся ID и слова

Добавлено через 2 минуты
в файле xstring меня направляет на этот код
как я понял,это конструктор копии,так как я передаю строку,как параметр функции
C++
1
2
3
4
5
6
    basic_string(const _Myt& _Right)
        : _Mybase(_Right._Alval)
        {   // construct by copying _Right
        _Tidy();
        assign(_Right, 0, npos);
        }
0
67 / 67 / 9
Регистрация: 04.01.2012
Сообщений: 231
Записей в блоге: 1
08.08.2012, 21:55 6
Что ж, посмотрел тему, написал так:
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
bool Dictionary::correct(string id)
{
    int ch, pr=0;
    for (unsigned int i = 0; i < id.size(); i++)
    {
        int j;
        ch=0;
        for (j = 0; j < 4; j++)
        {
            if (id.at(i+j)=='.')
                break;
            if (id.at(i+j)<'0' || id.at(i+j)>'9')
                return false;
            ch*=10;
            ch+=id.at(i+j)-'0';
            if (j == 3 && id.at(i+j) != '.')
                return false;
        }
        i+=j;
        if (ch>255 || ch<0)
            return false;
        pr++;
    }
    if (pr != 4)
        return false;
    ID.push_back(id);
    return true;
}
Вроде всё работает.
0
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
09.08.2012, 02:34  [ТС] 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
bool Dictionary::correct(string &id)
{
    int position = 0;
    string Temp_ID;
 
    for(unsigned int i = 0;i < id.size();i++)
        if(id.at(i) == '.')
        {
            for(unsigned int k = position;k < i;k++)
            {
                //если есть символы,отличные от цифр-выходим из функции
                if(!isdigit(id.at(k)))
                    return false;
                //исключаем запись наподобие 02.003.3.4
                if(id.at(k) == '0' && id.at(k+1) != '.')
                    return false;
 
                Temp_ID += id.at(k);
            }
 
                Temp_ID += ".";
                position = i + 1;
        }
 
    id = Temp_ID;
 
    return true;
}
Добавлено через 3 часа 0 минут
вот собственно функция вывода данных(забыл выложить)
C++
1
2
3
4
5
6
7
8
void Dictionary::Print()
{
    for(int i = 0;i < this->Amount;i++)
    {
        cout << this->words.at(i) << endl;
        cout << this->ID.at(i) << endl;
    }
}
Добавлено через 1 час 11 минут
всё работает,если интересно,расскажу в чём дело было
я записывал слова в конец вектора,а выводил слова с начала и столько,сколько у меня было слов,поэтому записав одно слово я выводил первый элемент вектора,а там естественно ничего нет
0
09.08.2012, 02:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2012, 02:34
Помогаю со студенческими работами здесь

Ошибка компиляции при вызове виртуальной функции
Здравствуйте. Сильно не плюйтесь, в С я не силен. Пишу на джаве, но попал в руки код, в котором...

Ошибка при вызове шаблона функции в другом классе
цель моей функции- выводить значения переменной в любом формате. функция в классе : .h class A...

Ошибка при вызове виртуальной функции в производном классе
Здравствуйте, извините, если подобная тема появлялась, но либо у меня руки не от туда растут, либо...

Ошибка при вызове функции добавления нового элемента в массив
Описывается класс Datchik. Затем в классе Lists объявляется массив объектов класса датчик и...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru