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

Вывод содержимого при работе с файлом - C++

Восстановить пароль Регистрация
 
RidoTTi
1 / 1 / 0
Регистрация: 11.06.2012
Сообщений: 34
24.06.2013, 23:13     Вывод содержимого при работе с файлом #1
Есть программа для работы с файлом.
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
94
#include "stdafx.h"
#include <iostream>
using namespace std;
 
struct infa
{
char fio[50];
int nomer, vozrast, rost,ves;
} bf;
 
void show ()
{
cout << bf.fio << endl
<< bf.nomer << endl
<< bf.vozrast << endl
<< bf.rost << endl
<< bf.ves << endl
<< "-------------------" << endl;
}   
 
void set ()
{
cout << "fio ";
cin >> bf.fio;
cout << "nomer";
cin >> bf.nomer;
cout << "vozrast";
cin >> bf.vozrast;
cout << "rost";
cin >> bf.rost;
cout << "ves :";
cin >> bf.ves;
}
 
int main()
{
FILE *f;
if ( (f = fopen ("c:\\file.txt", "rb")) != 0 )               //создание чтение 
      f = fopen ("c:\\file.txt", "ab+");                     //окрыть добав
else 
      f = fopen ("c:\\file.txt", "wb+");                     // вывод
 
cout << "1 - zapishet infy\n2 - pokazat vsy infy\n3 - zadanie\n";
short int sel;
cin >> sel;
switch (sel)
 {
    case 1 : 
    {
        int count;
        cout << "Kol-vo zapiseu\? :";
        cin >> count;
        for (int i=0; i<count; i++)
        {
            set();
            fwrite (&bf, sizeof(infa), 1, f);    // запись / чтение  __что именно__, _размер_ вычисляем размер - сумму всех полей __кол-во раз, куда- в файл.
        }
    }; break;
    case 2 :
    {
        while (feof(f) == 0)
        {
            fread (&bf, sizeof (infa), 1, f);
            show ();
        }
    }; break;
case 3 :
  {
    int ves, vozrast, rost;
    char *fio = new char;
    fread(&bf, sizeof (infa), 1, f);
    ves = bf.ves;
    vozrast = bf.vozrast;
    rost = bf.rost; 
        while (feof(f) == 0)
        {
            fread(&bf, sizeof (infa), 1, f);
            if ( (ves < bf.ves) && (vozrast < bf.vozrast) && ( rost > bf.rost) )
            {
                fio = bf.fio; 
                ves = bf.ves;
                vozrast = bf.vozrast;
                rost = bf.rost;     
            }     
        }
    cout <<"FIO- "<< fio << endl; cout <<"VES- "<< ves << endl;
    cout <<"VOZRAST- "<< vozrast << endl;
    cout <<"ROST- "<< rost << endl;
    }; break;
    }
 
system ("PAUSE");
return 0;
}
Проблема в том, что при выполнении задания(клавиша 3), вывод всё кроме фамилии(вместо фамилии непонятные закорючки). В чем может быть проблема?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Serega_094
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 80
24.06.2013, 23:15     Вывод содержимого при работе с файлом #2
Цитата Сообщение от RidoTTi Посмотреть сообщение
вместо фамилии непонятные закорючки
может языки разные?
RidoTTi
1 / 1 / 0
Регистрация: 11.06.2012
Сообщений: 34
24.06.2013, 23:17  [ТС]     Вывод содержимого при работе с файлом #3
Цитата Сообщение от Serega_094 Посмотреть сообщение
может языки разные?
Да нет, всё вводится на транслите. Кстати, при вызове функции show() всё выводится корректно.
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
26.06.2013, 20:39     Вывод содержимого при работе с файлом #4
Я сразу нажму 3.
У вас вообще есть какие-то записи в файле? Как вы это проверяете?
Что я могу получить из пустого файла?
RidoTTi
1 / 1 / 0
Регистрация: 11.06.2012
Сообщений: 34
26.06.2013, 22:06  [ТС]     Вывод содержимого при работе с файлом #5
Цитата Сообщение от nxtech Посмотреть сообщение
Я сразу нажму 3.
У вас вообще есть какие-то записи в файле? Как вы это проверяете?
Что я могу получить из пустого файла?
Эм.. нажатие 1 это заполнение файла, нажатие 2 это просмотр содержимого файла..
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
27.06.2013, 08:30     Вывод содержимого при работе с файлом #6
Я к тому, что если файл пустой, то по нажатию 3 у вас все-равно выполняется вывод ФИО и прочей информации. Согласитесь это не правильно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2013, 12:15     Вывод содержимого при работе с файлом
Еще ссылки по теме:

Вывод содержимого файла C++
C++ Аналог !foef, или как найти конец строки при работе с файлом
Почему выдает ошибку при работе с большим файлом, напишите как исправить ? C++

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

Или воспользуйтесь поиском по форуму:
RidoTTi
1 / 1 / 0
Регистрация: 11.06.2012
Сообщений: 34
27.06.2013, 12:15  [ТС]     Вывод содержимого при работе с файлом #7
Цитата Сообщение от nxtech Посмотреть сообщение
Я к тому, что если файл пустой, то по нажатию 3 у вас все-равно выполняется вывод ФИО и прочей информации. Согласитесь это не правильно.
Ну это да, программа-набросок.. меня больше интересует как всё же выполнить те условия(по нажатию 3).

Добавлено через 2 часа 49 минут
Всё сделал. Может кому пригодится..
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// 111.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
struct infa
{
    int nomer;
    char tip[20];
    char punkt[20];
    int vr_ot, vr_pr;
} bf;
 
void show ()
{
cout <<"nomer: "<< bf.nomer << endl
<<"tip: "<< bf.tip << endl
<<"punkt: "<< bf.punkt << endl
<<"vremya ot: "<< bf.vr_ot << endl
<<"vremya pr: "<< bf.vr_pr << endl
<< "-------------------" << endl;
}   
 
void set ()
{
cout << "vvedite nomer: ";
cin >> bf.nomer;
cout << "vvedite tip: ";
cin >> bf.tip;
cout << "vvedite punkt: ";
cin >> bf.punkt;
cout << "vvedite vremya otpravleniya: ";
cin >> bf.vr_ot;
cout << "vvedite vremya pribitiya: ";
cin >> bf.vr_pr;
}
 
int main()
{
FILE *f;
if ( (f = fopen ("c:\\file.txt", "rb")) != 0 )               //создание чтение 
      f = fopen ("c:\\file.txt", "ab+");                     //окрыть добав
else 
      f = fopen ("c:\\file.txt", "wb+");                     // вывод
 
cout << "1 - zapishet infy\n2 - pokazat vsy infy\n3 - zadanie\n";
short int sel;
cin >> sel;
switch (sel)
    {
    case 1 : 
    {
        int count;
        cout << "Kol-vo zapiseu\? :";
        cin >> count;
        for (int i=0; i<count; i++)
        {
            set();
            fwrite (&bf, sizeof(infa), 1, f);   // запись / чтение  __что именно__, _размер_ вычисляем размер - сумму всех полей __кол-во раз, куда- в файл.
        }
    }; break;
 
    case 2 :
    {
        fseek (f, 0, SEEK_END);
        int fLen = ftell(f);
        fseek(f,0,SEEK_SET);
        for(int i=0;i<(fLen/sizeof(infa));i++){
            fread (&bf, sizeof (infa), 1, f);
            show ();
        }
    }; break;
 
    case 3 :
    {
        int nomer,p;
        int vr_ot, vr_pr;
        char *tip = new char;
        char *punkt= new char;
        cout<<"vvedite punkt: "; cin>>punkt; 
        cout<<"vvedite zhelaemoe vremya pribitiya: "; cin>>vr_pr; cout<<endl;
        fread(&bf, sizeof (infa), 1, f);
        while (feof(f) == 0)
        {
            fread(&bf, sizeof (infa), 1, f);
            if ( (strcmp(punkt, bf.punkt)==0) && (vr_pr < bf.vr_pr) )
            {
                nomer = bf.nomer; 
                tip = strcpy(tip,bf.tip);
                punkt = strcpy(punkt,bf.punkt);
                vr_ot = bf.vr_ot;
                vr_pr = bf.vr_pr;
            }    
        }
        cout <<"Nomer: "<< nomer << endl; 
        cout <<"Tip: "<< tip << endl;
        cout <<"Punkt: "<< punkt << endl;
        cout <<"Vremya otpravleniya: "<< vr_ot << endl;
        cout <<"Vremya pribitiya: "<< vr_pr <<endl;
    }; break;
    }
 
system ("PAUSE");
return 0;
}
Yandex
Объявления
27.06.2013, 12:15     Вывод содержимого при работе с файлом
Ответ Создать тему
Опции темы

Текущее время: 04:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru