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

c++ работа с файлом - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В чём тут дело??? http://www.cyberforum.ru/cpp-beginners/thread234115.html
программы то зфцыкливаются, то вообще ни чего не выводят. Вводится последовательность из N вещественных чисел. Определить среднее арифметическое среди кратных 7 элементов последовательности #include <iostream> using namespace std; int main() {
C++ Программирование разветляющихся вычислительных процессов Выяснить, пересекаются ли кривые у=аx3+bx2+сx+d и y=ex3+fx2+gx+h. При положительном ответе найти точки пересечения. http://www.cyberforum.ru/cpp-beginners/thread234112.html
C++ C++...
Всем привет) Может кто помочь в том, в чём я не шарю?)) Одну из задач так же надо решить на Delphi. 1. Напишите программу, которая для введенного целого трехзначного числа определяет, какая цифра в числе является первой, какая – второй и какая – третьей. 2. Напишите программу, которая по введенному номеру месяца выводит сообщение о том, какое сейчас время года. 3. Напишите программу,...
C++ НОД
Извиняюсь за вопрос, просмотрел все но не нашел того, что нужно Задание: Найти НОД 2 чисел # include <iostream> # include <conio.h> using namespace std; int main(){ int a,b,i; cout<< "vvedite 2 4isla";
C++ на что можно заменить функцию? http://www.cyberforum.ru/cpp-beginners/thread234102.html
#include <vcl.h> #include <iostream.h> #include <iomanip.h> float yearzp(float z); //описание функции годовая 3/п const int m=20; //кол-во символов в строке struct worker //описание структуры {char surname, //Фамилия name; //Имя float zp; //З/п сотрудника за каждый месяц
C++ random number<<is the code true? # include <iostream> using namespace std; void main () { setlocale (LC_ALL,"rus"); int a,b,c,d,count; a = rand()%8+2; b = rand()%8+2; c = 1; count = 0; подробнее

Показать сообщение отдельно
sadok
14 / 14 / 0
Регистрация: 26.01.2011
Сообщений: 64
24.09.2011, 22:55  [ТС]     c++ работа с файлом
Прошло время и я опять взялся за выполнение етого задания,я немного поднатаскался написал вот -

main.cpp
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
#include "yy.h"
 
 
 
string IntToStr(int x)// преобразовывает int в string
{
        char buf[4];
        sprintf(buf,"%d",x);
        return buf;
}
 
 
void main()
{
    setlocale(LC_ALL,"");
    string s;
    cout<<"Ведите имя файла для чтения:  ";
    getline(cin,s);// считываем имя файла
    s+=".txt";
    ifstream ip_in(s.c_str());
    ip_adress ip_base(ip_in);// создаём наш обьект класа ip_adress
    if(!ip_in) cout<<endl<<"ошибка файл не найден";
    while(!ip_in.eof())
    {
        ip_base.read(ip_in);
        ip_base.write(lin1);
        ip_base.write(lin2);
    }
    ip_base.write("255.255.255.255");//вводим в масив адресов,последний ,максимальный адресс
 
    /*cout<<endl<<"файл-"<<endl;
    for(int i=0;i<ip_base.size();++i) // проверка состояние данных в потоке ip_base
        cout<<ip_base.see(i)<<endl;*/
    cout<<"Ведите имя файла для вывода:  ";
    getline(cin,s);
    s+=".txt";
    ofstream ip_out(s.c_str());
    for(int i=0;i<ip_base.size();i+=2)
    {
        //if((i/2)==(double)(i/2)) cout<<"(i/2)"<<(i/2)<<"(int)(i/2)"<<(double)(i/2)<<endl;
        ip_out<<ip_base.see(i)<<'-'<<ip_base.see(i+1)<<",000,NonUAIX"<<endl;
    }
    cout<<"Выполнено успешно";
    _getch();
}
файл yy.h
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#pragma once
#include "iostream"
#include "conio.h"
#include "string"
#include "fstream"
#include<vector>
using namespace std;
 
 
string IntToStr(int x);
 
string lin1;//x   (x/_)
string lin2;//x   (_/x)
 
 
class ip_adress {
public:
    ip_adress(istream& is):sourse(is)  {mas.push_back("0.0.0.0");}
    //конструктор изначально создаёт начальный адресс 0.0.0.0
    void read(istream& is);
    //функция считывает  из указаного потока _is_ построчно значения и заполняет две глабальные переменные _lin1_ и _lin2_ - каждый раз обнуляя их
    void write(string s);
    //функция добавляет строку _s_ в елемент класа _mas_
    int size();
    //возвращает количество елементов в векторе _mas_
    string see(int i);
    //возвращает строку из вектора _mas_ с индексом _i_
private:
    istream& sourse;//источник информации
    vector<string> mas;//вектор со строками, формат строки - ХХХ.ХХХ.ХХХ.ХХХ
};
 
 
void ip_adress::read(istream & is)//ввод в класс значение из потока файла S
{
    //функция считывает строку формата  ХХХ.ХХХ.ХХХ.ХХХ/ННН
    //преобразовывает в две строки - ХХХ.ХХХ.ХХХ.ХХХ и ХХХ.ХХХ.ХХХ.ННН
    //потом записывает их в глобальные переменные lin1 и lin2
    string line;//xxx.
    lin1="";//x   (x/_)
    lin2="";//x   (_/x)
    int mnt1,mnt2;//переменные для сохранения двух значений - m[0].[mnt1].[mnt2].m[4]
    char a[4];//в масив символов будет помещатся-точки и слеш  ( .   /   )
    int m[5];//будет хранится 5-ть значений ХХХ (ХХХ.ХХХ.ХХХ.ХХХ/ХХХ)
    for(int i=0;i<4;++i)
    {
        is>>m[i]>>a[i];
        cout<<m[i]<<a[i];
    }
    is>>m[4];
    cout<<m[4]<<endl;
 
    mnt2=m[2];//копируем значения - m[0].[mnt1].[mnt2].m[4]
    mnt1=m[1];
 
    m[4]+=1;
 
    if(m[3]<1)// в етом условии и else - мы изменяем на единицу начальный адрес,тоесть приводим к адресу на 1-цу меньше чем считано с файла
        {
            if(m[2]<1)
            {   
                if(m[1]<1){}
                else {m[1]-=1;m[2]=255;m[3]=255;}
            }
            else {m[2]-=1;m[3]=255;}
        }    
    else m[3]-=1;
 
        line+=IntToStr(m[0]); // создаём начальную,одинаковую для обоих адресов,точку - ХХХ.  
        line+='.';
 
    lin1=line+IntToStr(m[1])+'.'+IntToStr(m[2])+'.'+IntToStr(m[3]);//создаём строки формата ХХХ.ХХХ.ХХХ.ХХХ
    lin2=line+IntToStr(mnt1)+'.'+IntToStr(mnt2)+'.'+IntToStr(m[4]);
 
    cout<<endl<<lin1<<endl;//проверяем созданые строки с данными - ХХХ.ХХХ.ХХХ.ХХХ
    cout<<lin2<<endl;
    _getch();
}
 
void ip_adress::write(string s)
{
    mas.push_back(s);
}
 
int ip_adress::size()
{
    return mas.size();
}
 
string ip_adress::see(int i)
{
    return mas[i];
}
вполне рабочая программа,но с хоть и не единственными недоработками,но плохо работает функция -
C++
1
2
3
4
5
6
string IntToStr(int x)// преобразовывает int в string
{
        char buf[4];
        sprintf(buf,"%d",x);
                return buf;
}
а собственно,функция должна возвращать строку вида - 001 и т.д.
к примеру x=5 ,то программа должна вернуть строку = 005
если х=14,то вернуть строку = 014

тоесть мне нужно организовать функцию перевода int в string ,string формата (XXX),тоесть 3-х значную строку


из-за етой функции,у меня программа в файл записывает -
источник файл - 1.1.1.2/10
файл выхода-
0.0.0.0-1.1.1.1,000,nonuaix
1.1.1.11-255.255.255.255,000,nonuaix

а цель программы в файле вывода вывести -
000.000.000.000-001.001.001.001,000,nonuaix
001.001.001.011-255.255.255.255,000,nonuaix
 
Текущее время: 22:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru