1

Тема: допоможіть написати функцію запису в файл

Вітаю, маю функцію для читання з файлу. Допоможіть реалізувати запис значеннь в файл із клавіатури.

{
// Читаємо ряд вузлів і ребер
    fstream infile;
    infile.open("input_file");
    if (!infile){
        std::cout << "Cannot open file" << endl;
        return -1;
    
    }
    infile >> n >> e;
    cout<<"n - кiлькiсть вузлiв, е - кiлькiсть дуг."<<endl<<"a - початок дуги, b - кiнець дуги, с - пропускна спроможнiсть."<<endl;
    cout<< "  n= " <<n<<"   e= "<<e<<endl<<endl;
    // Ініціалізуємо матрицю з величезними вагами дуг 
    for (int i=0; i<n; i++) {
        for (int j=0; j<n; j++) {
            cost[i][j] = INT_MAX;
        }
    }
    // Читаємо значення ваг дуг
    int a,b,c;
    for ( int i=0; i<e; i++ ) {
        infile >> a >> b >> c;
        cost[a][b] = c;
        cost[b][a] = c;
        cout<<i+1<<") " << "a= " <<a<<"   " << "b= " <<b<<"   " << "c= " <<c<<endl;
    }
    infile.close();
}

2

Re: допоможіть написати функцію запису в файл

Цей шматочок коду написаний завдяки ресурсу: http://www.cplusplus.com/doc/tutorial/files/.

Він відкриває файл і видаляє наявний зміст. Перезаписує в файл ввід користувача. Потім читає із файлу дані і записує їх в змінні.

Якщо можна, покажіть, будь ласка, Ваш input_file.

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

#define INT_MAX 10

using namespace std;

struct point {
    double x;
    double y;
};

int main ()     {
    int i;
    double c, n, e;
    double cost[10][10];
    string line;
    point arc_start, arc_end;
    
    // Створюємо файл
    std::ofstream outfile ("input_file.txt", ios::trunc);
    outfile.close();
    
    // Відкриваємо файл для запису
    fstream infile;
    infile.open("input_file.txt");
    if ( !(infile.is_open()) ){
        std::cout << "Cannot open file" << endl;
        return -1;        
    }
    
    // Читаємо ряд вузлів і ребер
    cout << "Введіть, будь ласка дані.\n";
    
    cout << "Кількість вузлів.\n";
    do {
        cout << "n = ";
        cin >> line;
        n = atof(line.c_str());
    } while (n < 0 || n > 10);
    
    cout << "Кількість дуг.\n";
    do {
        cout << "e = ";
        cin >> line;
        e = atof(line.c_str());
    } while (e < 0 || e > 10);
    
    // Запис у файл
    infile << n << ' ' << e << endl;
    
    cout << "Початок дуги.\n";
    do {
        cout << "arc_start.x = ";
        cin >> line;
        arc_start.x = atof(line.c_str());
        cout << "arc_start.y = ";
        cin >> line;
        arc_start.y = atof(line.c_str());
    } while ( (arc_start.x < 0 || arc_start.x > 10) 
            && (arc_start.y < 0 || arc_start.y > 10) );
    
    cout << "Кінець дуги.\n";
    do {
        cout << "arc_end.x = ";
        cin >> line;
        arc_end.x = atof(line.c_str());
        cout << "arc_end.y = ";
        cin >> line;
        arc_end.y = atof(line.c_str());
    } while ( (arc_end.x < 0 || arc_end.x > 10) 
            && (arc_end.y < 0 || arc_end.y > 10) );
    
    cout << "Пропускна спроможність.\n";
    do {
        cout << "c = ";
        cin >> line;
        c = atof(line.c_str());
    } while (c < 0 || c > 10);
    
    infile << arc_start.x << ' ' << arc_start.y << endl; 
    infile << arc_end.x << ' ' << arc_end.y << endl;
    infile << c << endl;
    
    cout << "n - кiлькiсть вузлiв, е - кiлькiсть дуг." << endl;
    cout << "a - початок дуги, b - кiнець дуги, с - пропускна спроможнiсть." << endl;
    
    // Переносимо каретку на початок файлу
    infile.close();    
    infile.open("input_file.txt", ios::in);
   
    if (infile.is_open())
    {
        infile >> n >> e;
        cout << "n = " << n << endl;
        cout << "e = " << e << endl;
        infile >> arc_start.x >> arc_start.y;
        infile >> arc_end.x >> arc_end.y;        
        cout << "a = (" << arc_start.x << "; " << arc_start.y << ")" << endl;
        cout << "b = (" << arc_end.x << "; " << arc_end.y << ")" << endl;
        infile >> c;
        cout << "c = " << c << endl; 
    }
    
    // Ініціалізуємо матрицю з величезними вагами дуг 
    for (int i=0; i<n; i++) {
        for (int j=0; j<n; j++) {
            cost[i][j] = INT_MAX;
        }
    }
    
    infile.close();
}

Вивід програми:

Прихований текст

Введіть, будь ласка дані.
Кількість вузлів.
n = 1
Кількість дуг.
e = 2
Початок дуги.
arc_start.x = 3
arc_start.y = 4
Кінець дуги.
arc_end.x = 5
arc_end.y = 6
Пропускна спроможність.
c = 7
n - кiлькiсть вузлiв, е - кiлькiсть дуг.
a - початок дуги, b - кiнець дуги, с - пропускна спроможнiсть.
n = 1
e = 2
a = (3; 4)
b = (5; 6)
c = 7

RUN FINISHED; exit value 0; real time: 6s; user: 0ms; system: 0ms