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

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

Войти
Регистрация
Восстановить пароль
 
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
#1

Заполнение файла random - C++

10.12.2012, 16:15. Просмотров 526. Ответов 13
Метки нет (Все метки)

Почему когда я ввожу данные вручную то все хорошо записывает, а когда рондомом то по два имени?
проблема в функции
C++
1
void rando_m(info &A)
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cctype>
#include <string.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
 
int size=0;
 
using namespace std;
 
struct info{
       char name[6];
       char zodiak[6];
       char data[3];
       };
void inp(info &A);
void out(info &A);
void rando_m(info &A);
void edit(info &A);
 
int main()
{
      info A;
    cout<<"1)Enter people"<<endl;
    cout<<"2)cout people"<<endl;
    cout<<"3)Random people"<<endl;
    cout<<"4)Redag people"<<endl;
    while(1)
    {
      int c;
      cin>>c;
      switch(c)
      {
        case 1: inp(A); break;
        case 2: out(A); break;
        case 3: rando_m(A); break;
        case 4: edit(A); break;
             }}
  
    getch();
    return 0;
}
 
void inp(info &A){
    FILE *f;
    f=fopen("d://1.txt","ab");
        size++;
        cout<<"Enter:"<<endl;
        cout<<"Name"<<endl;
        cin>>A.name;
        cout<<"Zodiak"<<endl;
        cin>>A.zodiak;
        cout<<"data"<<endl;
        cin>>A.data;
        fwrite(&A,sizeof(A),1,f);
    fclose(f);
}
 
void out(info &A)
{
     FILE *f;
     f=fopen("d://1.txt","rb");
     for(int i=0;i<size;i++){
     fread(&A, sizeof(A), 1, f);
        cout<<"Name:  ";
        cout<<A.name<<endl;
        cout<<"Zodiak:  ";
        cout<<A.zodiak<<endl;
        cout<<"data:  ";
        cout<<A.data<<endl;
    }
        fclose(f);
 }
void rando_m(info &A){
     int n=0;
     cout<<"Enter ckiku random:  ";
     cin>>n;
        size+=n;
     char* name_1[6]={"Andriy","Sergiy","Predko","Mukola","Bogdan","Vasili"};
     char* zodiak_1[4]={"Aries1","Taurus","Gemini","Cancer"};
     char* data_1[4]={"123","456","789","321"};
     FILE *f;
     f=fopen("d://1.txt","ab");
     for(int i=0;i<n;i++){
          strcpy(A.name,name_1[rand()%6]);
          strcpy(A.zodiak,zodiak_1[rand()%4]);
          strcpy(A.data,data_1[rand()%4]);
          fwrite(&A,sizeof(A),1,f);
       }
       fclose(f);
       out(A);
       }
 
void edit(info &A){
  info K;
  FILE *f, *f1;
  bool result = false;
  f=fopen("d://1.txt", "r+b");
  f1=fopen("d://text1.txt", "w+b");
  if (f==NULL||f1==NULL) {
    cout<<"Error"<<endl;
  }
  else {
    if (size==0) {
      cout<<"Spisok is Empty"<<endl;
    }
    else {
      cout<<"Enter name for redag"<<endl;
      cin>>K.name;
      for (int i = 0; i < size; i++) {
        fread(&A, sizeof(A), 1, f);
        if (strcmp(A.name,K.name)==0) {
          cout<<"New name"<<endl;
          cin>>K.name;
          cout<<"New zodiak"<<endl;
          cin>>K.zodiak;
          cout<<"New data"<<endl;
          cin>>K.data;
          fwrite(&K, sizeof(K), 1, f1);
        }
        else
          fwrite(&A, sizeof(A), 1, f1);
      }
      if (result == false) {
        cout<<"Nema prizvuca"<<endl;
      }
    }
  }
  freopen("d://1.txt", "wb", f);
  freopen("d://text1.txt", "rb", f1);
  for (int i = 0; i < size; i++) {
    fread(&A, sizeof(A), 1, f1);
    fwrite(&A, sizeof(A), 1, f);
  }
  fclose(f1);
  fclose(f);
  cout<<endl;
}
[Удалено по просьбе автора]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2012, 16:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заполнение файла random (C++):

Заполнение массивов random - C++
Напишите программу, в которой объявляется три массива одинакового размера. Первые два массива заполняются случайными числами в диапазоне от...

Random и объекты класса (pseudo random) - C++
Всем привет. Есть класс: typedef unsigned int ui; class Player { private: ui health;

Заполнение из файла - C++
Не пойму, что написать в кавычках - заполняю из файла типа Russia millet 6 France corn 5 Italy grain 4 Austria oat 3 3 массива...

Заполнение map из файла - C++
Народ помогите, как заполнить контейнер map из файла? Файл представлен данными по типу: 5671234 Ivanov 3214567 Petrov 9871234...

Заполнение массива из файла - C++
void fail_massiv(int arr, int size) { int count = 0; //заповнення масиву з файла ifstream fin(&quot;massiv.dat&quot;);//створення потоку...

Заполнение структуры из файла - C++
Задание вот какое:В текстовом файле хранятся данные о группе студентов следующего содержания: фамилия, имя, домашний адрес, иностранный...

13
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.12.2012, 16:19  [ТС] #2
Заполнение файла random
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.12.2012, 16:24 #3
tokar2, еще раз, в чем проблема? какие два имени?
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.12.2012, 16:32  [ТС] #4
Немножко не так выразился! Вставляет в одно поле все три значения name zodiak data
так как на скриншоте
Name: VasisliCancer789
Zodiak: Canser789
Data: 789
а должно быть:
Name: Vasisli
Zodiak: Canser
Data: 789
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.12.2012, 16:55 #5
tokar2, мне кажется, данные в файл записываются без символов окончания строки друг за другом.
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.12.2012, 16:57  [ТС] #6
Я что-то не понял ((
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.12.2012, 16:59 #7
Строка в файл записывается так:
VasisliCancer789
или так
Vasisli Cancer 789
?
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.12.2012, 17:00  [ТС] #8
так
VasiliCancer789
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.12.2012, 17:06 #9
Ну вот. А надо, чтобы слова разделялись нулевым символом
Попробуйте
C++
1
2
3
       char name[7];
       char zodiak[7];
       char data[4];
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.12.2012, 17:09  [ТС] #10
А почему в консоль выводить так же?
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.12.2012, 17:14 #11
tokar2, в смысле, почему если в файле записано VasisliCancer789, то в консоль выводит VasisliCancer789, Cancer789 и 789 ?
вначале идет запись в первое слово до тех пор, пока не будет встречен символ конца строки
соответственно в name попадает VasisliCancer789. И хоть размер имени задан как 6 символов, это не помешает копированию. Т.е. просто портится соседняя память
далее идет запись в zodiak. Метод считывания знает, что размер имени задан как 6 и пропускает 6 символов. И тд.
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.12.2012, 17:26  [ТС] #12
А как это исправить?
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.12.2012, 17:27 #13
Цитата Сообщение от I.M. Посмотреть сообщение
Ну вот. А надо, чтобы слова разделялись нулевым символом
Попробуйте
C++
1
2
3
       char name[7];
       char zodiak[7];
       char data[4];
Этот вариант разве не помогает?
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.12.2012, 18:12  [ТС] #14
Не помогает!

Добавлено через 41 минуту
Есть еще одна проблема, почему не работает функция edit?
Она должна изменить тот профиль кого мы введем с клавиатуры (вводится имя)!
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cctype>
#include <string.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
 
int size=0;
 
using namespace std;
 
struct info{
       char name[7];
       char zodiak[7];
       char data[4];
       };
void inp(info &A);
void out(info &A);
void rando_m(info &A);
void edit(info &A);
 
int main()
{
      info A;
    cout<<"1)Enter people"<<endl;
    cout<<"2)cout people"<<endl;
    cout<<"3)Random people"<<endl;
    cout<<"4)Redag people"<<endl;
    cout<<"5)exit"<<endl;
    while(1)
    {
      int c;
      cin>>c;
      switch(c)
      {
        case 1: inp(A); break;
        case 2: out(A); break;
        case 3: rando_m(A); break;
        case 4: edit(A); break;
        case 5: exit(1); break;
             }}
    getch();
    return 0;
}
 
void inp(info &A){
    FILE *f;
    f=fopen("d://1.txt","ab");
        size++;
        cout<<"Enter:"<<endl;
        cout<<"Name"<<endl;
        cin>>A.name;
        cout<<"Zodiak"<<endl;
        cin>>A.zodiak;
        cout<<"data"<<endl;
        cin>>A.data;
        fwrite(&A,sizeof(A),1,f);
    fclose(f);
}
 
void out(info &A)
{
     FILE *f;
     f=fopen("d://1.txt","rb");
     for(int i=0;i<size;i++){
     fread(&A, sizeof(A), 1, f);
        cout<<"Name:  ";
        cout<<A.name<<endl;
        cout<<"Zodiak:  ";
        cout<<A.zodiak<<endl;
        cout<<"data:  ";
        cout<<A.data<<endl;
    }
        fclose(f);
 }
void rando_m(info &A){
     int n=0;
     cout<<"Enter ckiku random:  ";
     cin>>n;
        size+=n;
     char* name_1[6]={"Andriy","Sergiy","Predko","Mukola","Bogdan","Vasili"};
     char* zodiak_1[4]={"Aries1","Taurus","Gemini","Cancer"};
     char* data_1[4]={"123","456","789","321"};
     FILE *f;
     f=fopen("d://1.txt","ab");
     for(int i=0;i<n;i++){
          strcpy(A.name,name_1[rand()%6]);
          strcpy(A.zodiak,zodiak_1[rand()%4]);
          strcpy(A.data,data_1[rand()%4]);
          fwrite(&A,sizeof(A),1,f);
       }
       fclose(f);
       }
 
void edit(info &A){
  info K;
  FILE *f, *f1;
  bool result = false;
  f=fopen("1.txt", "r+b");
  f1=fopen("text1.txt", "w+b");
  if (f==NULL||f1==NULL) {
    cout<<"Error"<<endl;
  }
  else {
    if (size==0) {
      cout<<"Spisok is Empty"<<endl;
    }
    else {
      cout<<"Enter for redag"<<endl;
      cin>>K.name;
      for (int i = 0; i < size; i++) {
        fread(&A, sizeof(A), 1, f);
        if (strcmp(A.name,K.name)==0) {
          cout<<"Nema"<<endl;
          cin>>K.name;
          cout<<"Zodiak"<<endl;
          cin>>K.zodiak;
          cout<<"Data"<<endl;
          cin>>K.data;
          fwrite(&K, sizeof(K), 1, f1);
        }
        else
          fwrite(&A, sizeof(A), 1, f1);
      }
      if (result == false) {
        cout<<"Nema imeni"<<endl;
      }
    }
  }
  freopen("1.txt", "wb", f);
  freopen("text1.txt", "rb", f1);
  for (int i = 0; i < size; i++) {
    fread(&A, sizeof(A), 1, f1);
    fwrite(&A, sizeof(A), 1, f);
  }
  fclose(f1);
  fclose(f);
  cout<<endl;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2012, 18:12
Привет! Вот еще темы с ответами:

Заполнение очереди из файла - C++
Всем привет. У меня есть очередь, состоящую из объектов класса classA, которую нужно заполнить из файла при инициализации. Я использую...

Заполнение структуры из файла в С++ - C++
как в С++ возможно осуществить заполнение массива структур из файла, где информация разделена &quot;;&quot;???

Заполнение очереди из файла - C++
Подскажите, в чем проблема, не работает заполнение очереди из файла. #include&lt;iostream&gt; #include&lt;fstream&gt; using namespace std; ...

Заполнение вектора из файла - C++
Ребята, подскажите, как считать из файла числа типа double в вектор и вывести на экран? А также потом записать в файл?


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
10.12.2012, 18:12
Ответ Создать тему
Опции темы

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