Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 09.12.2018
Сообщений: 51

Проверка IP адресов

23.01.2019, 11:27. Показов 2846. Ответов 4

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с программой. Писала полностью сама.Не судите строго, я новичок) Не понимаю что делать. Помогите пожалуйста исправить мои ошибки, если можно не меняя сильно стиль написания. Буду очень признательна за помощь.
Задание такое: Написать функцию, которая проверяет, является ли данная строка допустимым IP-адресом (в удобочитаемой форме, конечно). Эта функция
должен возвратить 1, если адрес допустим, и 0, если нет. Функция должна проверить, если:
1. в строке есть 4 части, разделенные точками;
2. каждая часть содержит только цифры,
3. каждое число в диапазоне от 0 до 255 включительно.
Для преобразования фрагментов строк в целочисленные значения можно использовать функции strtol, atoi или sscanf.

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
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
/*проверяем IP адреса*/
void printarr(int arrIP[][4]);
int changearr(int arrIP[][4]);
 
int main(void)
{
    int arr[1][4];
    /*Заполняем массив*/
    int i=0, j, a;
    printf("Print IP without dots?\n");
    for (j = 0; j < 4; j++) {
        scanf_s("%d", &a);
        arr[i][j] = a;
    }
 
    printarr(arr);
    /*Выводим на правильность и неправильность адреса*/
    if (changearr(arr) == 1)
        printf("is a valid IP address");
    else printf("is not a valid IP address");
    printf("/n");
 
    system("pause");
    return 0;
}
/*Выводим массив*/
void printarr(int arrIP[][4])
{
    int i=0, j;
    for (j = 0; j < 4; j++) 
        printf("%d.", arrIP[i][j]);
}
/*Проверяем массив*/
int changearr(int arrIP[][4])
{
    int i = 0, j, k, result = 1;
    for (j = 0; j < 4; j++) {
        if (arrIP[i][j] >= 0 && arrIP[i][j] <= 255)
            k = 1;
        else k = 0;
        result *= k;
    }
    return result;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.01.2019, 11:27
Ответы с готовыми решениями:

Проверка использованных IP адресов
Как проверить: какие IP-адреса использовались на сетевой плате? Сетевуха Контроллер семейства Realtek PCIe GBE

Проверка айпи-адресов по маске
Доброго всем времени суток! Встала задача проверки поступления запроса от доверенного IP. Не подскажите как правильнее проверить что...

Проверка занятости IP адресов на Cisco
Как на cisco роутере узнать какие белые ip свободны? необходимо выделить ip адрес, но не могу разобраться какие из них заняты ...

4
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
23.01.2019, 11:36
Цитата Сообщение от Veronika_Kon Посмотреть сообщение
Помогите пожалуйста исправить мои ошибки
какие ошибки? Вы тестили программу? Исходя из тестов должны появиться вопросы, мол, на таких-то правильно работает, на других - нет и т.д.
0
Злостный нарушитель
 Аватар для Verevkin
10242 / 5670 / 1260
Регистрация: 12.03.2015
Сообщений: 26,265
23.01.2019, 12:14


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
typedef union
{
  unsigned dwValue;
  unsigned char dwBytes[4];
} TInAddr;
 
bool str2ip(char* s, TInAddr* ip)
{
  unsigned part[4];
 
  // введённая строка должна кончаться цифрой и состоять из 4 чисел [0..255],
  // разделённых точками
  bool success = (s && isdigit(s[strlen(s) - 1])) &&
                 (sscanf(s, "%u.%u.%u.%u", &part[3], &part[2], &part[1], &part[0]) == 4);
 
  if (!success) return false;
 
  // а вообще, можно и продолжить тут,
  // но в выходную структуру могут попасть мусорные значения.
 
  for (int idx = 0; idx != 4; idx++)
    if (part[idx] < 0x100) ip->dwBytes[idx] = part[idx];
    else return false;
 
  return success;
}
 
// функцию можно ещё соптимизировать, но мне лениво.
// в стандартной библиотеке WinSock есть функции для этих преобразований.
скучно...
0
Злостный нарушитель
 Аватар для Verevkin
10242 / 5670 / 1260
Регистрация: 12.03.2015
Сообщений: 26,265
23.01.2019, 13:29


скучно...
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
23.01.2019, 16:09
Добавлено через 9 минут
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
#include <iostream>
#include <sstream>
#include <conio>
using namespace std;
 
int adres(string t){
    stringstream ss;
    size_t i=0;
    int n,count=0;
 
    while(t[i]!='\0'){
 
        if(t[i]!='.')
          if(!isdigit(t[i]))
              return 0;
 
        if(t[i]=='.'){
           t[i]=' ';
           count++;
           if(count>3)
              return 0;
           }
 
        ss<<t[i];
        i++;
      }
      count=0;
      while(ss>>n){
        count++;
        if(n>255)
           return 0;
        }
        if(count!=4)
            return 0;
      return 1;
 }
 
int main()
{
  string s;
  int a;
 
  while(1){
     getline(cin,s);
     cout<<adres(s)<<"\npress ENTER to exit"<<"\n";
     a=getch();
     if(a==13)break;
  }
  system("pause");
  return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.01.2019, 16:09
Помогаю со студенческими работами здесь

Проверка, сравнение и поиск повторяющихся IP адресов в сохраняемом файле txt (csv)
Хлопцы, подскажите пожалуйста скрипт или решение какое, чтоб когда скрипт определяет IP-адрес на определенном сайте и сохраняет в...

БД адресов
Парни нужна ваша помощь и ваш совет для создания БД и связей между таблицами. Как пишут во всех букварях, самое главное правильно...

Расчет ip адресов
Помогите найти ошибку в коде программы: #include &quot;pch.h&quot; #include &lt;stdio.h&gt; #include &lt;windows.h&gt; int main(void) { int IP1,...

Смена ip адресов
Всех приветствую. Подскажите пожалуйста различные варианты решение вопроса. Конечная цель - возможность выходить в интернет используя...

Перебор IP адресов
Всем привет, подскажите как сгенерировать список IP адресов к примеру от 192.168.0.0 до 192.170.0.0


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru