Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
dimon5371
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 43
1

Fseek и структуры

13.06.2016, 16:40. Просмотров 153. Ответов 2
Метки нет (Все метки)

Добрый день,не могу разобраться с fseek в структурах / Нужно сделать запрос (zapros()) n-ой записи через fseek и вывести ее ,либо изменить ,выдается ошибка
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
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
using namespace std;
#include <stdio.h>
 
int input()
{   setlocale(LC_ALL, "Russian");
int i;
struct stud {int shifr;char name[30];char diplom[5];}t1[10];
    FILE *f=fopen("1.txt","wb");
    for(i=0;i<2;i++)
    {
    cout<<endl<<"шифр группы=  ";scanf("%d",&t1[i].shifr);
    cout<<"Имя=  ";scanf("%s",&t1[i].name);
    cout<<"Наличие красного диплома=Yes/not=";scanf("%s",&t1[i].diplom);
    fprintf(f," \n %d \n %s \n %s",t1[i].shifr,t1[i].name,t1[i].diplom);
    }
    fclose(f);
    return 0;
}
int vivod ()
{
    int i,k=1;
    FILE *f=fopen("1.txt","rb+");
    struct stud {int shifr;char name[30];char diplom[5];}t1[10];
    for(i=0;i<40;i++) cout<<"*";cout<<endl;
    cout<<"            Вуз                        |"<<endl;
    for(i=0;i<40;i++) cout<<"*";cout<<endl;
    cout<<"№ | Группа | Имя     |Красный диплом   |"<<endl;
    for (i=0;i<40;i++) cout<<"_";cout<<endl;
    //while (!feof(f))
    for(i=0;i<2;i++)
    {
fscanf(f,"%d %s %s",&t1[i].shifr,&t1[i].name,&t1[i].diplom);
printf("%d |%d    |%s     |     %s         |\n",k++,t1[i].shifr,t1[i].name,t1[i].diplom);
    }
    for(i=0;i<40;i++) cout<<"*";cout<<endl;
    int c=0,dp=0,r=1;
    FILE *nf=fopen("2.txt","wb");
    cout<<endl<<"К/Дипломники:"<<endl;
    k=1;
//while (!feof(f))
for(i=0;i<10;i++)
{
if (strcmp(t1[i].diplom,"yes")==0)
{
fprintf(nf," %d %s %s \n",t1[i].shifr,t1[i].name,t1[i].diplom);
printf(" %d %d \%s %s \n ",k++,t1[i].shifr,t1[i].name,t1[i].diplom);c++;dp++;
}
else {k++;c++;}
}
    cout<<"Всего студентов="<<c<<endl;
    cout<<"Красных дипломников="<<dp<<endl;
    //fprintf(f,"\n Всего = %d",k-1);
    //fprintf(f,"\n Всего красных = %d",dp);
    fclose(f);
    fclose(nf);
    return 0;
}
int dopoln()
{   setlocale(LC_ALL, "Russian");
int i,r;
struct stud {int shifr;char name[30];char diplom[5];}t1[10];
    FILE *f=fopen("1.txt","ab");
    cout<<"Новых записей";cin>>r;
    for(i=0;i<r;i++)
    {
    cout<<endl<<"шифр группы=  ";scanf("%d",&t1[i].shifr);
    cout<<"Имя=  ";scanf("%s",&t1[i].name);
    cout<<"Наличие красного диплома=Yes/not=";scanf("%s",&t1[i].diplom);
    fprintf(f," \n %d  %s  %s",t1[i].shifr,t1[i].name,t1[i].diplom);
    //fwrite (&t1, sizeof (t1), 1, f);  
    }
    fclose(f);
    return 0;
}
int zapros()
{
     setlocale(LC_ALL, "Russian");
int i,r,nom;
struct stud {int shifr;char name[30];char diplom[5];}t1[10];
    FILE *f=fopen("1.txt","r+b");
    fseek(f,0,SEEK_END);
    //r=ftell(f)/sizeof(t1[10]);
    while (1)
    {
        cout<<"Noмер записи = ";
        cin>>nom;
        fseek(f,nom*sizeof(t1),SEEK_SET);   
        fscanf(f,"  %d  %s  %s",&t1[i].shifr,&t1[i].name,&t1[i].diplom);
        printf("  %d  %s  %s",t1[i].shifr,t1[i].name,t1[i].diplom);
    }   
    fclose(f);
    system("pause");
    return 0;
}
int main ()
{
int nm;
setlocale(LC_ALL, "Russian");
while (1)
{
    cout<<"1.Ввод информаци"<<endl;
    cout<<"2.Вывод сведений и обработка"<<endl;
    cout<<"3.Дополнение"<<endl;
    cout<<"4.Выход"<<endl;
    cout<<"Введите номер"<<endl;cin>>nm;
    switch(nm)
{
         case 1: input();break;
        case 2 :vivod();break;
        case 3 :dopoln();break;
        case 4 : return 0;
            case 5: zapros();break;
        default : cout<<"Неверно"<<endl;
}
}
system("pause");
return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int zapros()
{
     setlocale(LC_ALL, "Russian");
int i,r,nom;
struct stud {int shifr;char name[30];char diplom[5];}t1[10];
    FILE *f=fopen("1.txt","r+b");
    fseek(f,0,SEEK_END);
    //r=ftell(f)/sizeof(t1[10]);
    while (1)
    {
        cout<<"Noмер записи = ";
        cin>>nom;
        fseek(f,nom*sizeof(t1),SEEK_SET);   
        fscanf(f,"  %d  %s  %s",&t1[i].shifr,&t1[i].name,&t1[i].diplom);
        printf("  %d  %s  %s",t1[i].shifr,t1[i].name,t1[i].diplom);
    }   
    fclose(f);
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2016, 16:40
Ответы с готовыми решениями:

fseek не работает
Нужно записать данные в структурированный текстовый файл. Проблема заключается...

fseek вылетает
#include &lt;stdio.h&gt; #include &lt;windows.h&gt; char *filename; long size; File...

Функция fseek
Здраствуйте! Пишу сейчас телефонную книгу. Точнее что-то наподобие этого....

fseek для ab
Нигде не могу найти работает ли fseek для режима ab??? или у аb статически...

fseek / fread
Всем привет! Такой вопрос возник. Есть строка, состоящая из нескольких...

2
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
13.06.2016, 19:54 2
У тебя файл записывается как текстовый, поэтом fseek() не поможет. Сначала запись сделай как положено, через fwrite().
И зачем в каждой функции описана одна и та же структура? Один раз она описывается над всеми функциями и setlocale() вызывается один раз в начала main().
0
dimon5371
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 43
14.06.2016, 00:14  [ТС] 3
nmcf, да ,я изменил на fwrite() fread() и заработало
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2016, 00:14

Что делает fseek?
Что делает fseek и зачем он нужен? fseek(firstFile,0,SEEK_SET); ...

Работа с файлами (fseek)
В чем проблема и как ее устранить ? #include &lt;iostream&gt; #include...

Fseek() для ifstream
Знаю, что есть два вида открытия и закрытие файла. 1) Это чистый Си, когда: ...


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

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

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