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

Теряються поля при выводе на экран - C++

Восстановить пароль Регистрация
 
Alekssey
2 / 2 / 0
Регистрация: 11.12.2010
Сообщений: 59
28.05.2011, 22:00     Теряються поля при выводе на экран #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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <values.h>
#include <string.h>
 
class Worker{
 
private:
char *fio;
int vozrast;
int oklad;
public:
Worker():fio(NULL),vozrast(0),oklad(0) {}
Worker(char *f,int v,int o);
void SetWorker(char* fbuf,int v,int o);
void WorkPrint();
};
 Worker::Worker(char *f,int v,int o) {
 fio = (char*)calloc (strlen(f),sizeof(char));
 strcpy (fio,f);
 vozrast=v;
 oklad=o;}
void Worker::SetWorker(char* fbuf,int v,int o){
strcpy(fio,fbuf);
vozrast=v;
oklad=o;}
void Worker::WorkPrint(){
printf("\n FIO: %s ",fio);
printf("\n Vozrast: %d",vozrast);
printf("\n Oklad: %d",oklad);}
 
class Kart:public Worker{
public:
void SetKart(int n,char *fbuf,int v, int o){
SetWorker(fbuf,v,o);
nm=n;
}
int PoiskNm(){
 return (nm);
 }
private:
int nm;
 
};
char* St(char *buf, int kol){
  for(int i=strlen(buf);i<kol;i++) buf[i]=' ';
  buf[kol-1]='\0';
  return(buf);
}
 
void main(){
 
const maxWork=5;
char fi[30];
int v,o,n;
Worker w[maxWork];
 
FILE *fb=fopen("1.txt","r+b");
if (fb==NULL) {
  printf ("\n Error!");
 
  fflush (stdin);
  getchar();
 
 }
 
int kol=0;
clrscr();
while(maxWork>kol){
    fscanf(fb, "%d %s %d %d\r\n",&n,&fi,&v,&o);
    St(fi,30);
    w[kol].SetWorker(fi,v,o);
    kol++;
   }
w[1].WorkPrint();
}
После запуска на экране
FIO: (null)
Vozrast:34
Oklad: 3Null pointer assignment.

Почему правильно выводиться только поле Vozrast?

Файл выглядет вот так:
1 Ivanov 13 6
2 Petrov 34 3
3 Sidorova 12 8
4 Stepanov 45 3
5 Durov 72 4
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2011, 22:00     Теряються поля при выводе на экран
Посмотрите здесь:

win32api странности при выводе на экран C++
Как сделать, чтобы при выводе на экран были пробелы C++
Ошибка при выводе на экран C++
C++ Мусор при выводе
C++ Ошибка в выводе сообщения на экран
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
adico
13 / 13 / 1
Регистрация: 24.02.2011
Сообщений: 64
29.05.2011, 02:22     Теряються поля при выводе на экран #2
А вы пробовали подебагать, мжб поможет. Я бы вместо char* использовал <string>
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.05.2011, 04:15     Теряються поля при выводе на экран #3
C++
1
fio = (char*)calloc (strlen(f),sizeof(char));
неправильно выделяешь
C++
1
fio = (char *) malloc(strlen(f) + 1);
вообще там new есть
ещё ты забыл сделать free()

Цитата Сообщение от Alekssey
Почему правильно выводиться только поле Vozrast?
оклад тоже правильно выводится, просто там нет перевода строки

C++
1
fscanf(fb, "%d %s %d %d", &n, fi, &v, &o);
здесь можно проверять, вернула ли функция 4, означающее, что было сделано четыре сохранения
Alekssey
2 / 2 / 0
Регистрация: 11.12.2010
Сообщений: 59
29.05.2011, 11:47  [ТС]     Теряються поля при выводе на экран #4
что делает free().
и где нужно поставить?

Сделал выделение как сказали, но все равно выводиться все кроме фамилии...

Почему при выводе пишет Null pointer assignment?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.05.2011, 03:11     Теряються поля при выводе на экран #5
Цитата Сообщение от Alekssey
что делает free().
и где нужно поставить?
free() освобождает память, выделенную через malloc(), calloc() и realloc()
если память не освобождать, то у программы разрастается количество занятой памяти
если полагаться на то, что в конце программа завершается и тем самым освобождает выделенную память, то этот код невозможно использовать повторно, как часть ещё большей программы

нужно Worker оставить пустым, а SetWorker сделать с выделением памяти
Yandex
Объявления
30.05.2011, 03:11     Теряються поля при выводе на экран
Ответ Создать тему
Опции темы

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