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

Структура Студент - C++

Восстановить пароль Регистрация
 
Folayt
 Аватар для Folayt
1 / 2 / 1
Регистрация: 25.10.2012
Сообщений: 107
06.02.2014, 20: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
95
96
97
98
99
100
101
102
103
104
105
106
#include "stdafx.h"
#include <locale>
 #include <iostream>
 #include <conio.h>
 #include <stdio.h>
 #include <Windows.h>
 using namespace std;
 
 typedef struct
 {
 char familiya [40];
 char adres [40];
 char group [40];
 int reit;
 
 } student;
 
 void form(char sFileName[10],int KolZap)
 {
 setlocale (LC_ALL,"RUSSIAN");
 int i;
 char* rejim="w";
 FILE *f;
 student s;
 if (KolZap==1) {
 rejim="a";
 }
 if ((f=fopen(sFileName,rejim))==NULL) exit(1);
 for (i=0;i<KolZap;i++) {
 cout <<"Vvedite Familiy` - ";
 scanf ("%s",&s.familiya);
 cout <<"Vvedite adres - ";
 scanf ("%s",&s.adres);
 cout <<"Vvedite Group ";
 scanf ("%s",&s.group);
 cout <<"Vvedite reiting - ";
 scanf ("%f",&s.reit);
 cout <<endl;
 fwrite(&s,sizeof(student),1,f);
 if (ferror(f)!=NULL) exit(2);
 }
 fclose(f);
 }
 void vivod(char sFileName[10])
 {
 FILE *f;
 student d;
 if ((f=fopen(sFileName, "r"))==NULL) exit(3);
 cout <<"File - "<<sFileName<<endl;
 while (!feof(f)) {
 fread (&d,sizeof(student),1,f);
 if (!feof(f)) {
 cout <<"**************************\n";
 cout <<"Familiya: "<<d.familiya<<endl;
 cout <<"Adres: "<<d.adres<<endl;
 cout <<"Group: "<<d.group<<endl;
 cout <<"Reiting: "<<d.reit<<endl;
 cout <<"****************************\n";
 }
 }
 fclose(f);
 
 }
 
 void udalenie(char cFileIn[10], char cFileOut[10])
 {
 student d;
 FILE *f1,*f2;
 char temp[40];
 if ((f1=fopen(cFileIn, "r"))==NULL) exit(4);
 if ((f2=fopen(cFileOut,"w"))==NULL) exit(5);
 cout << "Vvedite familiy` na ydalenie - ";
 cin >> temp;
 
 while(1) 
 { 
    fread(&d,sizeof(student),1,f1);
    if (feof(f1)) break;
    if (strcmp(d.familiya, temp))
        fwrite (&d,sizeof(student),1,f2);
 }
 
 fclose(f2);
 fclose(f1);
 }
 
 void main()
 {
     int n;
     setlocale(LC_ALL,"RUSSIAN");
     cout <<"Vvedite kol-vo zapisey: - ";
     cin>>n;
     cout <<endl;
     form("f1.txt",n);
     vivod("f1.txt");
     udalenie("f1.txt","f2.txt");
     cout <<"Posle udalenia:\n";
     vivod("f2.txt");
     getch();
     n=1;
     system("cls");
     form ("f2.txt",n);
     cout <<"Posle dobavlenia:\n";
     vivod ("f2.txt");
     getch();
 }
Миниатюры
Структура Студент  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
06.02.2014, 20:21     Структура Студент #2
Цитата Сообщение от Folayt Посмотреть сообщение
scanf ("%f",&s.reit);
вообще говоря %f это число с плавающей запятой, а переменная объявлена как целочисленная. не проверял, но может и из-за этого.

Не по теме:

а вообще уходите от каши со scanf и работой с потоками в соседних строках, пользуйтесь чем-то одним.

Folayt
 Аватар для Folayt
1 / 2 / 1
Регистрация: 25.10.2012
Сообщений: 107
06.02.2014, 20:29  [ТС]     Структура Студент #3
Цитата Сообщение от Черный ворон Посмотреть сообщение
вообще говоря %f это число с плавающей запятой, а переменная объявлена как целочисленная. не проверял, но может и из-за этого.

Не по теме:

а вообще уходите от каши со scanf и работой с потоками в соседних строках, пользуйтесь чем-то одним.

даже после того как изменяю тип на double ничего не изменяется.
Но спасибор за подсказку

Добавлено через 2 минуты
Цитата Сообщение от Черный ворон Посмотреть сообщение
вообще говоря %f это число с плавающей запятой, а переменная объявлена как целочисленная. не проверял, но может и из-за этого.

Не по теме:

а вообще уходите от каши со scanf и работой с потоками в соседних строках, пользуйтесь чем-то одним.

хотя если ставлю тип Float вроде как работает)

Добавлено через 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
95
96
97
98
99
100
101
102
103
104
105
106
#include "stdafx.h"
#include <locale>
 #include <iostream>
 #include <conio.h>
 #include <stdio.h>
 #include <Windows.h>
 using namespace std;
 
 typedef struct
 {
 char familiya [40];
 char adres [40];
 char group [40];
 float reit;
 
 } student;
 
 void form(char sFileName[10],int KolZap)
 {
 //setlocale (LC_ALL,"RUSSIAN");
 int i;
 char* rejim="w";
 FILE *f;
 student s;
 if (KolZap==1) {
 rejim="a";
 }
 if ((f=fopen(sFileName,rejim))==NULL) exit(1);
 for (i=0;i<KolZap;i++) {
 cout <<"Vvedite Familiy` - ";
 scanf ("%s",&s.familiya);
 cout <<"Vvedite adres - ";
 scanf ("%s",&s.adres);
 cout <<"Vvedite Group - ";
 scanf ("%s",&s.group);
 cout <<"Vvedite reiting - ";
 scanf ("%f",&s.reit);
 cout <<endl;
 fwrite(&s,sizeof(student),1,f);
 if (ferror(f)!=NULL) exit(2);
 }
 fclose(f);
 }
 void vivod(char sFileName[10])
 {
 FILE *f;
 student d;
 if ((f=fopen(sFileName, "r"))==NULL) exit(3);
 cout <<"File - "<<sFileName<<endl;
 while (!feof(f)) {
 fread (&d,sizeof(student),1,f);
 if (!feof(f)) {
 cout <<"**************************\n";
 cout <<"Familiya: "<<d.familiya<<endl;
 cout <<"Adres: "<<d.adres<<endl;
 cout <<"Group: "<<d.group<<endl;
 cout <<"Reiting: "<<d.reit<<endl;
 cout <<"**************************\n";
 }
 }
 fclose(f);
 
 }
 
 void udalenie(char cFileIn[10], char cFileOut[10])
 {
 student d;
 FILE *f1,*f2;
 char temp[40];
 if ((f1=fopen(cFileIn, "r"))==NULL) exit(4);
 if ((f2=fopen(cFileOut,"w"))==NULL) exit(5);
 cout << "Vvedite familiy` na ydalenie - ";
 cin >> temp;
 
 while(1) 
 { 
    fread(&d,sizeof(student),1,f1);
    if (feof(f1)) break;
    if (strcmp(d.familiya, temp))
        fwrite (&d,sizeof(student),1,f2);
 }
 
 fclose(f2);
 fclose(f1);
 }
 
 void main()
 {
     int n;
     setlocale(LC_ALL,"RUSSIAN");
     cout <<"Vvedite kol-vo zapisey: - ";
     cin>>n;
     cout <<endl;
     form("f1.txt",n);
     vivod("f1.txt");
     udalenie("f1.txt","f2.txt");
     cout <<"Posle udalenia:\n";
     vivod("f2.txt");
     getch();
     n=1;
     system("cls");
     form ("f2.txt",n);
     cout <<"Posle dobavlenia:\n";
     vivod ("f2.txt");
     getch();
 }
Рабочий код.
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
06.02.2014, 20:46     Структура Студент #4
Folayt, float - вещественное число одинарной точности
double - двойной.
для double спецификатор выглядит так:
C++
1
scanf( "%lf", &s.reit )
Yandex
Объявления
06.02.2014, 20:46     Структура Студент
Ответ Создать тему
Опции темы

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