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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
alexyoung
0 / 0 / 0
Регистрация: 25.06.2010
Сообщений: 6
#1

Адрес первого и последнего хоста в сети - C++

09.07.2010, 15:53. Просмотров 1225. Ответов 5
Метки нет (Все метки)

Собсно, из файла читается ip\mask. Нужно вывести имя первого и последнего хоста сети.
Код написал но где - то ошибка, скорее всего логическая. Если не сложно прошу помочь ее найти.
Заранее благодарен.
Код :

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
65
66
67
68
69
70
71
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
 
#include <iostream>
#include <cstdlib>
#include <math.h>
 
using namespace std;
 
int main()
{
FILE *f;
char *in = "in.dat";
int a[4],u[32],w[4], k, m, i, j, q, g, x, t = 0;
 
    f = fopen( in, "r" );
    fscanf(f, "%d.%d.%d.%d/%d", &a[3], &a[2], &a[1], &a[0], &m);
    fclose( f );
 
    for (j = 0; j < 32 ; j++)                 //обнуление
        u[j] = 0;
 
 
 
    for ( i = 0; i <= 3; i++)           //перевод в двоичную
    {
        while ( a[i] != 0 )
        {
            u[31-t] = a[i] % 2;
            a[i]/=2;
            
            t++;
        }
        t = 8 * pow (2,i) + 1;
    }
 
    k = 32 - m;
 
    for ( j = k+1; j <= 31; j++)            //первое число
        u[j] = 0;
 
    for( q = 0; q <= 3; q++)            //перевод в десятичную*
    {   
        for ( j = g, x = 7; x > -1 ;  x--)
        {
            w[q] = u[j] * pow( 2, x);
            g++;
        }
        printf("%d.", w[q]);
    }
    printf("\n");
 
 
    for ( j = k+1; j <= 31; j++)            //вторео число
        u[j] = 1; 
 
    for( q = 0; q <= 3; q++)            //*
    {   
        for ( j = g, x = 7; x > -1 ;  x--)
        {
            w[q] = u[j] * pow( 2, x);
            g++;
        }
        printf("%d.", w[q]);
    }
    printf("\n");
 
  return EXIT_SUCCESS;
 
}
Работаю под никсой. Выдает ошибку сегментирования.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2010, 15:53     Адрес первого и последнего хоста в сети
Посмотрите здесь:

Pазрешение введенного с клавиатуры имени хоста в IP-адрес - C++
Может кто знает, как выполнить разрешение введенного с клавиатуры имени хоста в IP-адрес. Если честно я даже не совсем понимаю, что от...

Односвязный список. Вывести сумму последнего элемента и первого, предпоследнего и последнего и т.д. - C++
Считываю с клавиатуры числа пока не встречаю 0. Например 1 3 7 5 8 1 0 Вывожу суму последнего элемента и первого, предпоследнего и...

Почему переприсваивается адрес последнего элемента? - C++
Привет парни. Я пишу домашку на тему АА дерева. Я сделал класс дерева, в него вложил класс узла. Реализую первый метод дерева -...

Адрес первого элемента массива - C++
1. Написать функцию, принимающую в качестве параметра количество строк и столбцов в таблице умножения. Функция должна создать двумерный...

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

Произвести обмен первого и последнего символа - C++
Слово вводится с клавиатуры, произвести обмен первого и последнего символа

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
09.07.2010, 16:45     Адрес первого и последнего хоста в сети #2
Переменная g использована без предварительной инициализации.
alexyoung
0 / 0 / 0
Регистрация: 25.06.2010
Сообщений: 6
09.07.2010, 16:59  [ТС]     Адрес первого и последнего хоста в сети #3
Точно!Спасибо!(Тока работает все равно не верно))
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,498
09.07.2010, 18:24     Адрес первого и последнего хоста в сети #4
alexyoung, каким-то Вы непростым путём идёте...
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
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
 
int main(void){
    struct in_addr net, mask;
    in_addr_t first, brd, last;
    char buf[BUFSIZ], *p;
 
    printf("Net address: ");
    if ( ! fgets(buf, BUFSIZ, stdin) ){
        perror("fgets");
        exit(EXIT_FAILURE);
    }
    if ( p = strrchr(buf, '\n') )
        *p = '\0';
    if ( ! *buf )
        exit(EXIT_FAILURE);
    memset(&net, 0, sizeof(struct in_addr));
    if ( ! inet_aton(buf, &net) ){
        perror("inet_aton");
        exit(EXIT_FAILURE);
    }
 
    printf("Mask: ");
    if ( ! fgets(buf, BUFSIZ, stdin) ){
        perror("fgets");
        exit(EXIT_FAILURE);
    }
    if ( p = strrchr(buf, '\n') )
        *p = '\0';
    if ( ! *buf )
        exit(EXIT_FAILURE);
    memset(&mask, 0, sizeof(struct in_addr));
    if ( ! inet_aton(buf, &mask) ){
        perror("inet_aton");
        exit(EXIT_FAILURE);
    }
 
    first = net.s_addr + 1;
    brd = net.s_addr + ~mask.s_addr;
    last = brd - 1;
 
    net.s_addr = first;
    printf("First host: %s\n", inet_ntoa(net));
    net.s_addr = last;
    printf("Last host: %s\n", inet_ntoa(net));
    net.s_addr = brd;
    printf("Broadcast address: %s\n", inet_ntoa(net));
 
    exit(EXIT_SUCCESS);
}
Адрес первого и последнего хоста в сети
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
09.07.2010, 23:19     Адрес первого и последнего хоста в сети #5
sed/Broadcast addres/Broadcast address/g;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2010, 00:34     Адрес первого и последнего хоста в сети
Еще ссылки по теме:

Перестановка в строке первого и последнего слова.. - C++
Всем доброго времени суток!! Появилось вот такое задание написать программу на языке C++ чересстрочного слияния двух текстовых файлов...

Перестановка первого и последнего элементов структуры - C++
Доброго времени суток! Как у знающих людей, прошу помощи. Вот задание: Создать класс для работы с файлами. В классе реализовать...

найти адрес первого нечетного числа в матрице - C++
for(int i=0;i&lt;n;i++) for(int j=0;j&lt;n;j++) { if(x%2!=0) { p=i; p=j; break; } }

Списки. Найти сумму первого и последнего элемента - C++
Двунаправленный список.Найти сумму первого и последнего элемента.Заранее спасибо

Найти номера первого и последнего максимального элемента - C++
Данное целое число N и набор из N целых чисел. Найти номера первой и последней максимального элемента из этого набора и вывести их в...

Найти сумму первого и последнего элемента списка - C++
Двунаправленный список.Найти сумму первого и последнего элемента. спасибо


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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,498
10.07.2010, 00:34     Адрес первого и последнего хоста в сети #6
odip, ну да, только у меня там ещё "Net addres" было, так, что
sed /addres/address/g

Добавлено через 16 минут
Кстати, серьёзнее косяк нашёл - это на маке всё работало - там порядок байтов с сетевым совпадает.
вот поправленная
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
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
 
int main(void){
    struct in_addr net, mask;
    in_addr_t first, brd, last;
    char buf[BUFSIZ], *p;
 
    printf("Net address: ");
    if ( ! fgets(buf, BUFSIZ, stdin) ){
        perror("fgets");
        exit(EXIT_FAILURE);
    }
    if ( p = strrchr(buf, '\n') )
        *p = '\0';
    if ( ! *buf )
        exit(EXIT_FAILURE);
    memset(&net, 0, sizeof(struct in_addr));
    if ( ! inet_aton(buf, &net) ){
        perror("inet_aton");
        exit(EXIT_FAILURE);
    }
 
    printf("Mask: ");
    if ( ! fgets(buf, BUFSIZ, stdin) ){
        perror("fgets");
        exit(EXIT_FAILURE);
    }
    if ( p = strrchr(buf, '\n') )
        *p = '\0';
    if ( ! *buf )
        exit(EXIT_FAILURE);
    memset(&mask, 0, sizeof(struct in_addr));
    if ( ! inet_aton(buf, &mask) ){
        perror("inet_aton");
        exit(EXIT_FAILURE);
    }
 
    first = htonl(net.s_addr) + 1;
    brd = htonl(net.s_addr) + ~htonl(mask.s_addr);
    last = brd - 1;
 
    net.s_addr = ntohl(first);
    printf("First host: %s\n", inet_ntoa(net));
    net.s_addr = ntohl(last);
    printf("Last host: %s\n", inet_ntoa(net));
    net.s_addr = ntohl(brd);
    printf("Broadcast address: %s\n", inet_ntoa(net));
 
    exit(EXIT_SUCCESS);
}
Yandex
Объявления
10.07.2010, 00:34     Адрес первого и последнего хоста в сети
Ответ Создать тему
Опции темы

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