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

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

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

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

31.07.2012, 03:45. Просмотров 1494. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 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";
    }
}
alsav22
5416 / 4812 / 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 >>, то он первые пробелы проигнорирует, если другим способом (и пробелы считаются допустимыми, а по моему, не должны) то в моём коде их нужно убирать, предложенной конструкцией.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 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 достаточно однозначно представляет такое число, так что чисто принципиально ничего вредного не несёт. Другое дело, если вы его используете где-то, а ваша библиотека тупая и не понимает больше трёх символов (или специфично реагирует на ведущие нули). Но если что, специально для неё можно преобразовать без нулей.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.08.2012, 11:54     Определение значения переменной в цикле #19
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
IP адрес (v4) — это 32-битное число.
Это понятно, но сама эта строка не число. Это форма записи такого числа. А форма может налагать некие ограничения.
Формат его записи определяете только вы.
Ой, ли? И дело тут не в тупых библиотеках. Попробуйте в адресной строке браузера ввести, что-нибудь, наподобие: 192.000168.1.1 . Получается, всё-таки, что такая форма записи IP неправильная и нужно от лишних нолей, перед использованием, избавляться, или определять такую запись, как неверную.
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Другое дело, если вы его используете где-то
Вот это и хотелось бы узнать у ТС. Дальше, что с этой строкой?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 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.
alsav22
01.08.2012, 12:18
  #21

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2012, 16:26     Определение значения переменной в цикле
Еще ссылки по теме:
Использование переменной типа char в цикле for C++
Автоматическое создание переменной с определённым именем в цикле C++
C++ В чем разница между объявлением переменной до и в цикле?
Не могу в цикле собрать из строк идентификатор переменной C++
C++ Управление значением переменной в бесконечном цикле извне

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

Или воспользуйтесь поиском по форуму:
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
08.08.2012, 16:26  [ТС]     Определение значения переменной в цикле #22
Цитата Сообщение от alsav22 Посмотреть сообщение
сторока - это IP - адрес ?
нет,это ID слова
Yandex
Объявления
08.08.2012, 16:26     Определение значения переменной в цикле
Ответ Создать тему
Опции темы

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