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

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

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

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

10.12.2012, 16:15. Просмотров 511. Ответов 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;
}
[Удалено по просьбе автора]
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2012, 16:15     Заполнение файла random
Посмотрите здесь:

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

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

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

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

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

Заполнение vector из файла - C++
Надо заполнить вектора из файла. Файл выглядит примерно так. 10 85 m356df78 250 15 90 m346gh78 250 27 125 m369f98 250 56 35...

Заполнение структуры из файла - C++
Дан файл , содержащий информацию вида «1;162008;1;ООО «Слон»;1;2,5;». Как можно сделать чтение структуры, если поля разделены точкой с...

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

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

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

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

Быстрое заполнение большого файла - C++
Здравствуйте! Возникла проблема в работе с большим файлом: возникла необходимость быстро заполнять некоторый участок большого файла...

Заполнение массива структур из файла - C++
Здравствуйте появилась проблема - никак не могу найти, как заполнить массив структур из файла. Как заполнить файл я разобрался, а наоборот...


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

Или воспользуйтесь поиском по форуму:
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.12.2012, 18:12  [ТС]     Заполнение файла random #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;
}
Yandex
Объявления
10.12.2012, 18:12     Заполнение файла random
Ответ Создать тему
Опции темы

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