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

ФПД - C++

Восстановить пароль Регистрация
 
Takitosia
 Аватар для Takitosia
0 / 0 / 0
Регистрация: 11.01.2011
Сообщений: 3
11.01.2011, 22:10     ФПД #1
люди добрые, никак не могу понять, почему программа работает не верно.

Задание: Записать в файл данные о сдаче 1-го экзамена в учебной группе.Структура записи : Фамилия студента, оценка.Для примера - 5 студентов.Далее у студента, фамилия которого задается, ввести новую оценку,затем рассчитать средний балл в группе.

Ошибка в том, что при замене переписывается не одна строка, а все последующе.
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
#include<stdio.h>
#include<string.h>
#include<conio.h>
typedef struct
 {char ln[30];
 int ball;
 }stud;
 
int main (void)
 {
 FILE *f,*n,*z;
 stud st;
 int i=0,e=0,k,sum=0,q=0,newball,written=0;
 char a[30];
 clrscr();
 f=fopen("j:\\TC\\rez.dat","wb+");
 while(i<5)
  {printf("Введите фамилию: \n");
  for(e=0;e<30;e++)
  st.ln[0]='\0';
  do
   {gets(st.ln);}
   while(!st.ln[0]);
   printf("Ведите оценку: \n");
   scanf("%d",&st.ball);
   fwrite(&st,sizeof(st),1,f);
   i++;
  }
  fclose(f);
 n=fopen("j:\\TC\\rez.dat","r+b");
  z=fopen("j:\\TC\\rez1.dat","wb+");
  printf("введите фамилию,чтобы изменить балл:\n");
  do
  {gets(a);}
  while(!*a);
  printf("введате оценку:\n");
  scanf("%d",&newball);
  fseek(n,0,SEEK_END);
  k=ftell(n)/sizeof(st);
  fseek(n,0,SEEK_SET);
  for(i=0;i<k;i++)
   {
   fread(&st,sizeof(st),1,n);
   if(strcmp(st.ln,a)==0)
    {
    st.ball=newball;
    fseek(n,-sizeof(st),SEEK_CUR);
    fwrite(&st,sizeof(st),1,n);
    fflush(n);
    written=1;
    }
   fwrite(&st,sizeof(st),1,z);
   printf("%s %d\n",st.ln,st.ball);
   sum+=st.ball;
   q++;
   }
 if(written==0)
 printf("неверная фамилия\n");
 printf("средний балл:%.2f\n",(float)sum/q);
 fclose(n);
 return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
11.01.2011, 22:22     ФПД #2
всё из-за квадратика в конце
Takitosia
 Аватар для Takitosia
0 / 0 / 0
Регистрация: 11.01.2011
Сообщений: 3
12.01.2011, 11:54  [ТС]     ФПД #3
а по существу сказать нечего, юморной майонез?
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8501 / 2168 / 61
Регистрация: 07.03.2007
Сообщений: 10,836
Завершенные тесты: 1
12.01.2011, 11:58     ФПД #4
Takitosia, ну так может вам после замены надо break-ом завершать цикл поиска?

Mayonez, меньше флуда - отвечайте по существу проблемы
Takitosia
 Аватар для Takitosia
0 / 0 / 0
Регистрация: 11.01.2011
Сообщений: 3
12.01.2011, 21:11  [ТС]     ФПД #5
break не помог
Yandex
Объявления
12.01.2011, 21:11     ФПД
Ответ Создать тему
Опции темы

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