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

Работа с файлами, новичек ищет совета. - C++

Восстановить пароль Регистрация
 
patsuan
0 / 0 / 0
Регистрация: 08.06.2011
Сообщений: 3
08.06.2011, 23:20     Работа с файлами, новичек ищет совета. #1
Программировать начал недавно, много проблем в знаниях функций, вот задачка:
"Сформировать текстовый файл f1. Удалить из него все слова, одинаковой длины. Записать оставшиеся слова в новый файл f2. Выполнить сортировку слов в файле f2 по алфавиту и записать отсортированный список слов в f3."
Проблема в записи в файлы f2 и f3. Пожалуйста посмотрите в чем дело

Вот код:

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
142
143
144
145
146
147
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
 
FILE *f1;
char fname[50];
int i, j, n, v, l, z;
char s[100], d, a[100], b[100][100];
 
void open();
void menu();
void create();
void read();
void obrabotka();
 
void main() { menu(); }
 
void menu()
{
    int c;
    clrscr();
    cout<<"==================================="<<endl;
    cout<<"               Menu                "<<endl;
    cout<<"==================================="<<endl;
    cout<<"1.Sozdat fail                    "<<endl;
    cout<<"2.Obrabotka                        "<<endl;
    cout<<"3.Prosmotr faila                 "<<endl;
    cout<<"4.Vihod                            "<<endl;
 
    cout<<"==================================="<<endl;
    cout<<"Viberite deistvie:";
    do
    {
        c=getch();
        switch(c)
        {
            case 49: create();
            case 50: obrabotka();
            case 51: read();
            case 52: exit(0);
        }
    }
    while((c<49)||(c>52));
}
 
//------------------------------------------------------------------------
 
void open()
{
    clrscr();
    cout<<"Vvedite imya faila: ";
    gets(fname);
    f1=fopen (fname,"w");
    rewind (f1);
}
 
//------------------------------------------------------------------------
 
void read()
{
    clrscr();
    cout<<"Vvedite imya faila: ";
    gets(fname);
    f1=fopen(fname,"r");
    rewind(f1);
    clrscr();
    cout<<"\nSoderjimoe faila: ";
    do
    {
        d=fgetc(f1);
        printf("%c",d);
    }
    while(d!=EOF);
    fclose(f1);
    cout<<"\nDlya prodoljeniya nazmte lubuu klavishu...";
    getch();
    menu();
}
 
//------------------------------------------------------------------------
 
void create()
{
    open();
    printf("\n%s\n","Vvedite tekst: ");
    gets(s);
    fputs(s,f1);
    fclose(f1);
    getch();
    menu();
}
 
//------------------------------------------------------------------------
 
void obrabotka()
 
{
    /*i=0;
    n=0;
    v=-1;
    strcpy(b[n],"");*/
    fgets(a,100, f1);
    while(a[i]!='.')
    {
        if(a[i]!=' ')
        {
            v++;
            b[n][v]=a[i];
        }
        else
        {
            b[n][v+1]='\0';
            v=-1;
            n++;
        }
        i++;
    }
    for(i=0;i<n;i++)
    {
        l=strlen(b[i]);
        for(j=0;j<l-1;j++)
        {
            if(b[i][j+1]==' ')
                b[i][j]=b[i][j+1];
        }
        b[i][j]='\0';
    }
    v=0;
    for(i=0;i<n-1;i++)
    {
        if(j==1)
               strcpy(b[i],b[i+1]);
        if (strcmp(b[i],b[n-1])==0)
        {
            strcpy(b[i],b[i+1]);
            j=1;
            v++;
        }
    }
    cout << "\nText ";
    fprintf(f1,"%s",b);
    fclose(f1);
    getch();
    menu();
}
Добавлено через 53 минуты
блин((( не тот код((((((


Вот тот:
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
 
 
FILE *f1, *f2, *f3;
char fname[100];
int i, j, n, k, l, z, x[100], f[100];
char s[255], d[100], h, b[100][100], r[100];
 
void open();
void menu();
void create();
void read();
void obrabotka();
 
 
void main() { menu(); }
 
void menu()
{
    int c;
    clrscr();
    cout<<"==================================="<<endl;
    cout<<"               Menu                "<<endl;
    cout<<"==================================="<<endl;
    cout<<"1.Sozdat fail                    "<<endl;
    cout<<"2.Obrabotka                        "<<endl;
    cout<<"3.Prosmotr faila*                 "<<endl;
    cout<<"4.Vihod                           "<<endl;
 
    cout<<"==================================="<<endl;
    cout<<"Viberite deistvie:";
    do
    {
        c=getch();
        switch(c)
        {
            case 49: create();
            case 50: obrabotka();
            case 51: read();
            case 52: exit(0);
        }
    }
    while((c<49)||(c>52));
}
 
//------------------------------------------------------------------------
 
void open()
{
    clrscr();
    cout<<"Vvedite imya faila: ";
    gets(fname);
    f1=fopen (fname,"a+");
    rewind (f1);
}
 
//------------------------------------------------------------------------
 
void read()
{
    clrscr();
    cout<<"Vvedite imya faila: ";
    gets(fname);
    f1=fopen(fname,"r");
    rewind(f1);
    clrscr();
    cout<<"\nSoderjimoe faila: ";
    do
    {
        h=fgetc (f1);
        printf("%c",h);
    }
    while(h!=EOF);
    fclose(f1);
    cout<<"\nDlya prodoljeniya nazmte lubuu klavishu...";
    getch();
    menu();
}
 
//------------------------------------------------------------------------
 
void create()
{
    open();
    printf("\n%s\n","Vvedite tekst: ");
    gets(s);
    fputs(s,f1);
    fclose(f1);
    cout<<"\nDlya prodoljeniya nazmte lubuu klavishu...";
    getch();
    menu();
}
 
//------------------------------------------------------------------------
 
void obrabotka()
 
{
    char a[80][255]={0};
    open();
    fgets(d, 101, f1);
    l=strlen(d);
    n=0;
    z=-1;
    for(i=0;i<l;i++)
    {
          //    z=-1;
        if(d[i]!=' ')
        {
            z++;
            a[n][z]=d[i];
        }
        else
        {
            a[n][z+1]='\0';
            z=-1;
            n++;
        }
    }
    for(i=0;i<n;i++)
    {
        x[i]=strlen(a[i]);
        f[i]=0;
    }
    for(i=0;i<n-1;i++)
        for(j=i+1;j<n;j++)
            if(x[i]==x[j])
            {
                f[i]=1;
                f[j]=1;
            }
    k=-1;
    for(i=0;i<n;i++)
        if(f[i]==0)
        {
            k++;
            strcpy(b[k],a[i]);
        }
    fclose(f1);
    clrscr();
    cout<<"Vvedite imya faila: ";
    gets(fname);
    f2=fopen (fname,"a+");
    for(i=0;i<k;i++)
    fprintf(f2,"%c",b);
    fclose(f2);
    j=0;
    while(j<=(k-2))
    {
        for(i=0;i<(k-1);i++)
            if(strcmp(b[i],b[i+1])>0)
            {
                strcpy(r,b[i]);
                strcpy(b[i],b[i+1]);
                strcpy(b[i+1],r);
            }
        l++;
    }
    clrscr();
    cout<<"Vvedite imya faila: ";
    gets(fname);
    f3=fopen (fname,"a+");
    for(i=0;i<k;i++)
    fprintf(f3,"%c ",b);
    fclose(f3);
    cout<<"\nDlya prodoljeniya nazmte lubuu klavishu...";
    getch();
    menu();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2011, 23:20     Работа с файлами, новичек ищет совета.
Посмотрите здесь:

C++ работа с файлами
работа с файлами C++
C++ Си, работа с файлами
C++ Работа с файлами
C++ Работа с файлами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
08.06.2011, 23:32     Работа с файлами, новичек ищет совета. #2
Цитата Сообщение от patsuan Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
c=getch();
switch(c)
{
        case 49: create();
        case 50: obrabotka();
        case 51: read();
        case 52: exit(0);
}
До файлов я пока не дошёл, но я надеюсь есть представление о том, как работает процитированный кусок?
При нажатии на 1 будут выполнены все пункты.
Они, конечно, не выполнятся, так как в самих функциях рекурсивно вызывается menu, но это уже совсем плохо.
Рекурсии здесь не место. Совсем.
И кстати, код программы будет понятнее, если вместо кодов символов в вариантах будут сами символы, т. е. case '0': и т. д.
patsuan
0 / 0 / 0
Регистрация: 08.06.2011
Сообщений: 3
09.06.2011, 14:30  [ТС]     Работа с файлами, новичек ищет совета. #3
Да ты монстр С++ у меня всё работает отлично я отладил прогрмму за 2е суток! так что я профи!Ё
Меню отлажено на 1 открывается еденица)))))))))))))
на 2ку Открываеться Обратботка)))))))))))
на 3-ку чтение!!!))))))))
теперь вопрос а что откроеться на 4-ку?))))))))))
Можешь протестировать моё меню... и сделать правильные выводы!

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
void menu()
{
        int c;
        clrscr();
        cout<<"==================================="<<endl;
        cout<<"               Menu                "<<endl;
        cout<<"==================================="<<endl;
        cout<<"1.Sozdat fail                    "<<endl;
        cout<<"2.Obrabotka                        "<<endl;
        cout<<"3.Prosmotr faila                 "<<endl;
        cout<<"4.Vihod                            "<<endl;
 
        cout<<"==================================="<<endl;
        cout<<"Viberite deistvie:";
        do
        {
                c=getch();
                switch(c)
                {
                        case 49: create();
                        case 50: obrabotka();
                        case 51: read();
                        case 52: exit(0);
                }
        }
        while((c<49)||(c>52));
 
}
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
09.06.2011, 14:34     Работа с файлами, новичек ищет совета. #4
Естественно работает. Пока стек не кончится. Это хорошо, конечно, что в современных системах стек большой и его окончания можно не дождаться, но рекурсия здесь — это идеологически неправильный подход.
patsuan
0 / 0 / 0
Регистрация: 08.06.2011
Сообщений: 3
09.06.2011, 14:52  [ТС]     Работа с файлами, новичек ищет совета. #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
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
 
 
FILE *f1, *f2;
char fname[100];
int i, j,p, q, n,m, k, l, z, x[100], f[100];
char s[255], d[100], h, b[100][100], r[255];
 
void open();
void menu();
void create();
void read();
void obrabotka();
 
 
void main() { menu(); }
 
void menu()
{
    int c;
    clrscr();
    cout<<"==================================="<<endl;
    cout<<"               ЊҐ*о                "<<endl;
    cout<<"==================================="<<endl;
    cout<<"1.‘®§¤*вм  д*Ё«                    "<<endl;
    cout<<"2.Obrabotka                        "<<endl;
    cout<<"3.‘®¤Ґа¦Ё¬®Ґ д*©«*                 "<<endl;
    cout<<"4.‚л室                            "<<endl;
    cout<<"==================================="<<endl;
    cout<<"Viberite deistvie:";
    do
    {
        c=getch();
        switch(c)
        {
            case 49: create();
            case 50: obrabotka();
            case 51: read();
            case 52: exit(0);
        }
    }
    while((c<49)||(c>52));
}
//------------------------------------------------------------------------
 
void open()
{
    clrscr();
    cout<<"Vvedite imya faila: ";
    gets(fname);
    f1=fopen (fname,"a+");
    rewind (f1);
}
 
//------------------------------------------------------------------------
 
void read()
{
    clrscr();
    cout<<"Vvedite imya faila: ";
    gets(fname);
    f1=fopen(fname,"r");
    rewind(f1);
    clrscr();
    cout<<"\nSoderjimoe faila: ";
    do
    {
        h=fgetc (f1);
        printf("%c",h);
    }
    while(h!=EOF);
    fclose(f1);
    cout<<"\nDlya prodoljeniya nazmte lubuy klavishu...";
    getch();
    menu();
}
 
//------------------------------------------------------------------------
 
void create()
{
    open();
    printf("\n%s\n","Vvedite tekst: ");
    gets(s);
    fputs(s,f1);
    fclose(f1);
    getch();
    menu();
}
 
//------------------------------------------------------------------------
 
void obrabotka()
 
{
 
      //    char a[80][255]={0};
    open();
       //   fgets(d, 101, f1);
       //   gets(s);
    l=strlen(s);
    cout << "vvedite N: ";
    cin >> n;
    do
    {
    h=fgetc(f1);
    j=0;
    m=(k/n);
    if((m%2)!=0)
       {
 
       }
    for (i=0; i<m; i++)
        {
        while(j<n)
        {
           b[i][j]=h;
           j++;
        }
        b[i][j]='\0';
        b[i+1][0]=h;
        j=1;
        }
    }
    while (h!=EOF);
    fclose(f1);
 
 
    clrscr();
    cout<<"Vvedite imya faila f2: ";
    gets(fname);
    f2=fopen (fname,"w");
      //    cout << "vvedite k:";
      //    cin >>k;
    for (i=0; i<=k; i++)
 
    fprintf(f2,"%s\n ", b[i]);
    fclose(f2);
 
 
 
 
 
 
      /*    char a[80];
    clrscr();
    cout << "vvedite imya faila^ ";
    gets(fname);
    f1=fopen(fname, "w");
    printf ("\n%s\n","vvedite tekst v konce To4ka.");
    gets(a);
    p=strlen(a);
    while (a[p-1]!='.')
    {
        fputs(a,f1);
        gets(a);
        fprintf(f1,"%c",'\n');
        p=strlen(a);
    }
 
 
 
 
 
    f1=fopen(fname,"r");
    cout << "soderjimoe faila";
    p=0;
    do
    {
    h=fgetc(f1);
    if (h!='\n')
      p++;
    else {};
      {
      cout << "v stroke " << p << "simvolov" ;
      p=0;
      }
    printf("%c",h);
    }
    while (h!=EOF);
    cout << "v stroke" << p-1 << "simvolov";
    fclose(f1);
    cout << endl;
    while (!kbhit());
 
      */
 
    getch();
    menu();
}
А вот с таким кодом разберёшься? Как думаешь какой тут должен был быть ответ???
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
09.06.2011, 15:03     Работа с файлами, новичек ищет совета. #6
На какой вопрос?

Добавлено через 10 минут
Впрочем в строке 129 подозрительный цикл. Он точно не бесконечный?
Yandex
Объявления
09.06.2011, 15:03     Работа с файлами, новичек ищет совета.
Ответ Создать тему
Опции темы

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