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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
#1

Определение значения переменной в цикле - C++

31.07.2012, 03:45. Просмотров 1518. Ответов 21
Метки нет (Все метки)

В данной функции переменная k должна быть равна position в начале цикла,а когда отлаживаю программу,то k инициируется совершенно другим значением(большое отрицательное число,как будто я и не инициирую переменную).Почему так,не подскажите?
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
bool Dictionary::correct(char id[],char TempID[])
{
    int digit = 0;
    int temp = 0;
    int degree;
    int position = 0;
 
    for(int i = 0;i < 16;i++)
        if(id[i] == '.')
        {
            if(position == 0)
            {
                
                degree = 2;
 
                for(int k = position;k < i;k++)
                {
                    temp = atoi((char *)id[k]);
                    digit += temp*pow(10.0,degree);
                    degree--;
                }
 
                itoa(digit,(char *)TempID[temp++],10);
 
                TempID[temp++] = (char)".";
 
                digit = 0;
                position = i;
            }
            else
            {
                degree = i - position - 2;
 
                for(int k = position + 1;k < i;k++)
                {
                    temp = atoi((char *)id[k]);
                    digit += temp*pow(10.0,degree);
                    degree--;
                }
 
                itoa(digit,(char *)TempID[temp++],10);
 
                TempID[temp++] = (char)".";
 
                digit = 0;
                position = i;
            }
        }
 
 
    return true;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2012, 03:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определение значения переменной в цикле (C++):

Определение переменной в цикле - C++
Есть скажем такая конструкция. while ( условие ) { int x; int y = 0; } 1) Что здесь будет происходить с...

Объявление переменной в цикле - C++
for (int i=0; i!=5; ++i) { int tmp; std::cout &lt;&lt; &amp;tmp &lt;&lt; std::endl; } Будет ли переменная tmp объявляться при каждой...

Объявление переменной в цикле - зло? - C++
Во имя читаемости пришлось объявить и инициализировать ссылки на переменные и сами переменные в теле цикла. Преподаватель против такой...

Форматированный вывод переменной в цикле - C++
Господа, извините за тупой вопрос, но меня он очень смутил, делал табуляцию функции в цикле, переменная &quot;y&quot; задана на интервале с шагом...

Разное имя переменной в цикле - C++
Привет Всем. У меня возник такой вопрос. Во вложенных циклах мне необходимо инициализировать переменные, которые будут отличаться...

Изменение переменной во вложенном цикле - C++
Всем доброго времени! Возникла загадочная проблема (загодочная для меня, думаю тут найдутся более опытные:) ) Есть прога, она...

21
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.08.2012, 02:31 #16
Радикальное решение для фанатов scanf уже предлагали?
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
#include <iostream>
#include <cstdio>
 
bool isValid(const char *str)
{
    int A, B, C, D;
    sscanf(str, "%d.%d.%d.%d", &A, &B, &C, &D);
    return (A >= 0) && (A <= 255) &&
           (B >= 0) && (B <= 255) &&
           (C >= 0) && (C <= 255) &&
           (D >= 0) && (D <= 255);
}
 
int main()
{
    std::string data;
    std::cin >> data;
    if (isValid(data.c_str())) {
        std::cout << "Valid";
    }
    else {
        std::cout << "Invalid";
    }
}
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.08.2012, 08:10 #17
Цитата Сообщение от alexey31415 Посмотреть сообщение
Сообщение от alsav22
Пробелы до первой цифры?
гн понял,это к чему?
Цитата Сообщение от alsav22 Посмотреть сообщение
Пробелы до первой цифры? "___255.255.255.255."
Вместо знака _ пробелы. Такой ввод, код должен определять, как верный или как ошибочный?
Цитата Сообщение от alexey31415 Посмотреть сообщение
вводить любое число в удобнойформе,то есть 1 вместо 001
Эт-то работает. Меня обратное интересует:
Такая запись допустима: 255.000.255.255. , 255.00.255.255. , 001.255.255.255. , 01.255.255.255. ? Имеются ввиду нули перед числами. Или только так должно пропускать: 1.0.255.255. ?
Цитата Сообщение от alexey31415 Посмотреть сообщение
4-я точка не обязательна
Если я правильно понял, сторока - это IP - адрес ? Для него точка в конце допустима?

Добавлено через 17 минут
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Радикальное решение для фанатов scanf уже предлагали?
Меня интересует, для IP - адреса такой формат допустим: 255.000023.34.3. ? В настройках сети я, например, не могу ввести до точки больше трёх цифр. Если это не допустимо, то код ~OhMyGodSoLong~ не подходит (или требует доработки, на проверку: не более трёх знаков до точки).

Добавлено через 24 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
Сообщение от alsav22
Пробелы до первой цифры? "___255.255.255.255."
Вместо знака _ пробелы. Такой ввод, код должен определять, как верный или как ошибочный?
Если ввод в строку делать через cin >>, то он первые пробелы проигнорирует, если другим способом (и пробелы считаются допустимыми, а по моему, не должны) то в моём коде их нужно убирать, предложенной конструкцией.
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.08.2012, 11:27 #18
Цитата Сообщение от alsav22 Посмотреть сообщение
Меня интересует, для IP - адреса такой формат допустим: 255.000023.34.3. ? В настройках сети я, например, не могу ввести до точки больше трёх цифр. Если это не допустимо, то код ~OhMyGodSoLong~ не подходит (или требует доработки, на проверку: не более трёх знаков до точки).
Да хоть двадцать нулей и в шестнадцатеричной системе. IP адрес (v4) — это 32-битное число. Формат его записи определяете только вы. 255.000023.34.3 достаточно однозначно представляет такое число, так что чисто принципиально ничего вредного не несёт. Другое дело, если вы его используете где-то, а ваша библиотека тупая и не понимает больше трёх символов (или специфично реагирует на ведущие нули). Но если что, специально для неё можно преобразовать без нулей.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.08.2012, 11:54 #19
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
IP адрес (v4) — это 32-битное число.
Это понятно, но сама эта строка не число. Это форма записи такого числа. А форма может налагать некие ограничения.
Формат его записи определяете только вы.
Ой, ли? И дело тут не в тупых библиотеках. Попробуйте в адресной строке браузера ввести, что-нибудь, наподобие: 192.000168.1.1 . Получается, всё-таки, что такая форма записи IP неправильная и нужно от лишних нолей, перед использованием, избавляться, или определять такую запись, как неверную.
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Другое дело, если вы его используете где-то
Вот это и хотелось бы узнать у ТС. Дальше, что с этой строкой?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
01.08.2012, 12:01 #20
Ой, ну господи, ладно:
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
#include <iostream>
#include <cstdio>
 
bool isValid(const char *str)
{
    int A, B, C, D;
    A = B = C = D = -1;
    sscanf(str, "%3d.%3d.%3d.%3d", &A, &B, &C, &D);
    return (A >= 0) && (A <= 255) &&
           (B >= 0) && (B <= 255) &&
           (C >= 0) && (C <= 255) &&
           (D >= 0) && (D <= 255);
}
 
int main()
{
    std::string data;
    std::cin >> data;
    if (isValid(data.c_str())) {
        std::cout << "Valid";
    }
    else {
        std::cout << "Invalid";
    }
}
Теперь не больше трёх цифр. Отсеиваются только те уникумы, трактующие 042 как восьмеричную запись числа 34.
0
alsav22
01.08.2012, 12:18
  #21

Не по теме:

quote=~OhMyGodSoLong~;3319191]Ой, ну господи, ладно:[/quote] А, без ой, можно? Кому-то одолжение делаете?

0
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
08.08.2012, 16:26  [ТС] #22
Цитата Сообщение от alsav22 Посмотреть сообщение
сторока - это IP - адрес ?
нет,это ID слова
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2012, 16:26
Привет! Вот еще темы с ответами:

Исключение при создании переменной в цикле - C++
Здравствуйте. Всех с праздником! Возник вопрос. Есть код: char *line; int SizeLine; ... while(flag) { ... SizeLine =...

Использование переменной типа char в цикле for - C++
Ребята, подскажите пожалуйста, как использовать 8-ми битную переменную в цикле for? Неправильный пример - for(char i = 0; i &lt; N; i++)

Управление значением переменной в бесконечном цикле извне - C++
Здравствуйте. Подскажите, пожалуйста, какими способами можно изменять значение переменной в цикле извне. Например: int x; ...

Автоматическое создание переменной с определённым именем в цикле - C++
Например, нужно чтобы с каждым шагом цикла, создавалась переменная a1, a2, a3 и так далее


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

Или воспользуйтесь поиском по форуму:
22
Yandex
Объявления
08.08.2012, 16:26
Ответ Создать тему
Опции темы

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