Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
kovalsky
1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 48
#1

Работа с текстовыми файлами

08.03.2015, 16:17. Просмотров 919. Ответов 3
Метки нет (Все метки)

Есть программа, которая считывает массив структур с текстового файла, выполняет сортировку и результат выводит в другой текстовый файл, но она работает при помощи библиотеки fstream. Надо эту же программу переписать на библиотеку stdio, но я не очень знаком с синтаксисом, поэтому программа не компилируется.
Прилагается два исходника, один полностью рабочий, второй надо подкорректировать.
Спасибо.
C++ (Qt)
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <fstream>
#include <string.h>
using namespace std;
 
struct DATA{
    char  month[100];
    
    int year;
};
 
struct shop{
 
 
char name[100];
char avtor[100];
DATA data;
float cost;
};
 
 
 
void input (shop &a,ifstream &inf)
{
    inf >> a.name;
    inf >> a.avtor;
    inf >> a.data.month;
    inf >> a.data.year;
    inf >> a.cost;
}
 
void out_tt( shop *a)
{
    cout<< a->name << '\t' << a->avtor << '\t'<< '\t' <<
     a->data.month << '\t' << a->data.year << '\t' << a->cost << endl;
}
 
void out_tt (shop *a,ofstream &outf)
{
    outf  <<  a->name << ' ' << a->avtor << ' ' <<
     a->data.month << ' ' << a->data.year << ' ' << a->cost << ' ' << endl;
    
}
 
 
void output_mas ( shop *mas,int n,ofstream &outf)
{
    int i;
    cout << "*****" << endl;
     cout << n << endl;
     for (i=0;i<n; i++)
     {
        out_tt (&mas[i]);
        out_tt (&mas[i],outf);
     }
}
 
 
 
void sort (shop *a,int n)
{
    int i;
    bool f=true;
    shop temp;
    while (f)
    {
        f=false;
        for (i=0;i<n-1;i++)
        {
            if (strcmp (a[i].avtor, a[i+1].avtor) > 0)
            {
                   temp=a[i];
        
        
                   a[i]=a[i+1];
       
                   a[i+1]=temp;
            
                   f=true;
            }
        }
    }
    
}
 
int main()
{
   setlocale (LC_ALL, "Russian");
    int  n,i;
      FILE *inf = fopen ("input2.txt", "r");
      FILE *outf = fopen ("output2.txt","w");
    shop t[100];
    fscanf (inf , "%d", &n);
    cout << n << endl;
    
    for (i=0;i<n;i++)
    {
        input (t[i],inf);
        out_tt (&t[i]);
    }
 
    outf << "input file \n";
    output_mas (t,n,outf);
    sort (t,n);
    outf << "\ sort file \n";
    output_mas(t,n,outf);
 
 
      
        return 0;
}
C++ (Qt)
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <fstream>
#include <string.h>
using namespace std;
 
struct DATA{
    char  month[100];
    
    int year;
};
 
struct shop{
 
 
char name[100];
char avtor[100];
DATA data;
float cost;
};
 
 
 
void input (shop &a,FILE  &inf)
{
    fscanf (inf,"%s",a.name);
    fscanf (inf,"%s",a.avtor);
    fscanf (inf,"%s",a.data.month);
    fscanf (inf,"%d",a.data.year);
    fscanf (inf,"%d",a.cost);
}
 
void out_tt( shop *a)
{
    cout<< a->name << '\t' << a->avtor << '\t'<< '\t' <<
     a->data.month << '\t' << a->data.year << '\t' << a->cost << endl;
}
 
void out_tt (shop *a,ofstream &outf)
{
    fprintf(outf,"%s %s %s %d %d\n",  a->name,  a->avtor ,
     a->data.month , a->data.year a->cost );
    
}
 
 
void output_mas ( shop *mas,int n,ofstream &outf)
{
    int i;
    cout << "*****" << endl;
     cout << n << endl;
     for (i=0;i<n; i++)
     {
        out_tt (&mas[i]);
        out_tt (&mas[i],outf);
     }
}
 
 
 
void sort (shop *a,int n)
{
    int i;
    bool f=true;
    shop temp;
    while (f)
    {
        f=false;
        for (i=0;i<n-1;i++)
        {
            if (strcmp (a[i].avtor, a[i+1].avtor) > 0)
            {
                temp=a[i];
        
        
                   a[i]=a[i+1];
       
                   a[i+1]=temp;
            
                f=true;
            }
        }
    }
    
}
 
int main()
{
   setlocale (LC_ALL, "Russian");
    int  n,i;
FILE *inf=fopen ("input2.txt","r");
FILE* outf = fopen("output2.txt","w"); 
    shop t[100];
fscanf (inf , "%d", &n);
    cout << n << endl;
    
    for (i=0;i<n;i++)
    {
        input (t[i],inf);
        out_tt (&t[i]);
    }
 
    fprintf(outf,"input file\n");
 
    output_mas (t,n,outf);
    sort (t,n);
        fprintf(outf,"\nsort file\n");
    output_mas(t,n,outf);
 
 
      
        return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2015, 16:17
Ответы с готовыми решениями:

Работа с текстовыми файлами
Создать программу, которая обрабатывает файл в последовательном режиме. ...

Работа с текстовыми файлами
Всем доброго дня! Нужна помощь в решении следующей работы: Нужно создать...

Работа с текстовыми файлами
Здравствуйте, уважаемые !!! Появились проблемы во время решения задачи. Никак...

Работа с текстовыми файлами
Доброго времени суток. Есть ф-ия: void FillM(int **&amp;tab, int &amp;w, int &amp;h) { ...

Работа с текстовыми файлами в С++
Каким образом можно организовать эту программу, в частности определение цифры и...

3
nmcf
6260 / 5572 / 2532
Регистрация: 14.04.2014
Сообщений: 23,464
08.03.2015, 16:56 #2
C++
1
2
3
4
5
    fscanf (inf,"%s",a.name);
    fscanf (inf,"%s",a.avtor);
    fscanf (inf,"%s",a.data.month);
    fscanf (inf,"%d",&a.data.year);
    fscanf (inf,"%f",&a.cost);
C++
1
2
    fprintf(outf,"%s %s %s %d %f\n",  a->name,  a->avtor ,
     a->data.month , a->data.year, a->cost );
1
kovalsky
1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 48
08.03.2015, 18:01  [ТС] #3
ошибка на 28 строчке кода
28 28 C:\Users\Ìàêñèì\Desktop\ëàáà òåêñòîâûå ôàéëû ñòäèî.cpp [Error] cannot convert 'FILE {aka _iobuf}' to 'FILE* {aka _iobuf*}' for argument '1' to 'int fscanf(FILE*, const char*, ...)'
компилятор Дев С++
0
nmcf
6260 / 5572 / 2532
Регистрация: 14.04.2014
Сообщений: 23,464
09.03.2015, 08:16 #4
Лучший ответ Сообщение было отмечено kovalsky как решение

Решение

C++
1
void input(shop &a, FILE *inf)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2015, 08:16

Работа с текстовыми файлами
Функция копирует с одного файла в другой, не подскажите как улучшить ее? И есть...

работа с текстовыми файлами
подскажите пожалуйста как решить эти задачи методом для начинающего или где...

Работа с текстовыми файлами
Здравствуйте. Сегодня писал программу, в которой нужно считать строки из файла...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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