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

чтения заданной строки через fseek - C++

Восстановить пароль Регистрация
 
InSpectr
 Аватар для InSpectr
10 / 10 / 1
Регистрация: 09.09.2013
Сообщений: 53
19.09.2013, 22:00     чтения заданной строки через fseek #1
Программа должна считать строку из бинарного файла. Но считывает не правильно... подскажите.
что тут как я понимаю не так
fseek(ff,(sizeof(nom-1))*(i),SEEK_SET);
fread(&BLOCKNOTE[nom],sizeof (BLOCKNOTE),1,ff);
Сама программа:
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
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <string>
#include <fstream>
 
 
using namespace std;
 
 
struct NOTE {
char NAME[30];
long long int TELE;
int BDAY[3];
};
 
 
int main()
{ 
    
    int m;
    int i,q,c;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<"Сколько сотрудников: ";
    (cin>>m).get();
    NOTE *BLOCKNOTE= new NOTE [m];
    cout<<"Введите Имя, Телефон, Дату рождения\n";
    for(i=0;i<m;i++)
    { 
        gets(BLOCKNOTE[i].NAME);
        cin >>BLOCKNOTE[i].TELE;
        for(q=0;q<3;q++)
            cin >>BLOCKNOTE[i].BDAY[q];
        cin.get(); 
    }
    
    
 
    ofstream f("binary.dat", ios::binary);
    for(int ia=0;ia<i;ia++)
    {
        f.write((char *)(&BLOCKNOTE[ia]),sizeof (NOTE));
    }
    f.close();
    
    
    FILE *ff;
    int nom;
    bool temp;
    cout<<endl<<endl<<"Введите какую строку хотите вывести: ";
    cin>>nom;
    
        ff=fopen("binary.dat","r+b");
        fseek(ff,(sizeof(nom-1))*(i),SEEK_SET);
        fread(&BLOCKNOTE[nom],sizeof (BLOCKNOTE),1,ff);
        fclose(ff);
        
 
        cout<<" Имя: "<<BLOCKNOTE[nom].NAME;
        cout<<" Телфон: "<<BLOCKNOTE[nom].TELE;
        cout<<" Дата: ";
        for(int q=0;q<3;q++)
        {
            cout<<" "<< BLOCKNOTE[nom].BDAY[q] ;
        }
    
 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2013, 22:00     чтения заданной строки через fseek
Посмотрите здесь:

C++ Разработать функцию,которая перекрывает символы строки заданным количеством символов другой строки, начиная с заданной позиции
Функция fseek C++
составить процедуру в результате которой из первой заданной строки будет удалятся каждый символ принадлежащий и второй заданной строке C++
Из заданной пользователем строки сформулируйте новую, добавив пробел перед каждым символом строки кроме пробела C++
C++ fseek для ab
C++ Для заданной строки построить строку, в которой содержаться только буквы латинского алфавита исходной строки
C++ Каким образом после чтения из файла, узнать позицию для чтения следующего куска байт
Пропускается первый оператор чтения строки с клавиатуры C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.09.2013, 01:20     чтения заданной строки через fseek #2
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
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <string>
#include <fstream>
 
 
using namespace std;
 
 
struct NOTE {
char NAME[30];
long long int TELE;
int BDAY[3];
};
 
 
int main()
{ 
    
    int m;
    int i,q,c;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<"Сколько сотрудников: ";
    (cin>>m).get();
    NOTE *BLOCKNOTE= new NOTE [m];
    cout<<"Введите Имя, Телефон, Дату рождения\n";
    for(i=0;i<m;i++)
    { 
        gets(BLOCKNOTE[i].NAME);
        cin >>BLOCKNOTE[i].TELE;
        for(q=0;q<3;q++)
            cin >>BLOCKNOTE[i].BDAY[q];
        cin.get(); 
    }
    
    
 
    ofstream f("binary.dat", ios::binary);
    for(int ia=0;ia<i;ia++)
    {
        f.write((char *)(&BLOCKNOTE[ia]),sizeof (NOTE));
    }
    f.close();
    
    
    FILE *ff;
    int nom;
    bool temp;
    cout<<endl<<endl<<"Введите какую строку хотите вывести: ";
    cin>>nom;
    
    ff = fopen("binary.dat","r+b");
    
    int n = sizeof(NOTE) * (nom - 1);
    fseek(ff, n, SEEK_SET);
    
    NOTE note;
    
    fread(&note, sizeof(NOTE), 1, ff);
    fclose(ff);
        
    cout<<" Имя: "<<note.NAME;
    cout<<" Телфон: "<<note.TELE;
    cout<<" Дата: ";
    for(int q=0;q<3;q++)
    {
        cout<<" "<< note.BDAY[q] ;
    }
        
    /*cout<<" Имя: "<<BLOCKNOTE[nom - 1].NAME;
    cout<<" Телфон: "<<BLOCKNOTE[nom - 1].TELE;
    cout<<" Дата: ";
    for(int q=0;q<3;q++)
    {
        cout<<" "<< BLOCKNOTE[nom - 1].BDAY[q] ;
    }*/
    
 
return 0;
}
InSpectr
 Аватар для InSpectr
10 / 10 / 1
Регистрация: 09.09.2013
Сообщений: 53
21.09.2013, 15:40  [ТС]     чтения заданной строки через fseek #3
Все работает спасибо большое.
Yandex
Объявления
21.09.2013, 15:40     чтения заданной строки через fseek
Ответ Создать тему
Опции темы

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