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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
InSpectr
10 / 10 / 1
Регистрация: 09.09.2013
Сообщений: 53
#1

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

19.09.2013, 22:00. Просмотров 320. Ответов 2
Метки нет (Все метки)

Программа должна считать строку из бинарного файла. Но считывает не правильно... подскажите.
что тут как я понимаю не так
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
Посмотрите здесь:

Функция fseek C++
C++ fseek для ab
Пропускается первый оператор чтения строки с клавиатуры C++
C++ Ввод строки в структуре, заданной как char *str через scanf (ПОМОЩЬ)
C++ Ошибка чтения знаков строки
C++ Из первой заданной строки удаляется каждый символ, принадлежащий второй заданной строке
Заменить значения всех элементов заданной строки матрицы числами заданной последовательности C++
В чем различие чтения строки и слова при вводе C++
Ошибка чтения строки C++
C++ Fseek и структуры
Задача на строки и чтения из файла C++
Getchar() возвращает EOF сразу после чтения первого символа строки C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5415 / 4811 / 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
10 / 10 / 1
Регистрация: 09.09.2013
Сообщений: 53
21.09.2013, 15:40  [ТС]     чтения заданной строки через fseek #3
Все работает спасибо большое.
Yandex
Объявления
21.09.2013, 15:40     чтения заданной строки через fseek
Ответ Создать тему
Опции темы

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