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

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

Войти
Регистрация
Восстановить пароль
 
patsuan
0 / 0 / 0
Регистрация: 08.06.2011
Сообщений: 3
#1

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

08.06.2011, 23:20. Просмотров 356. Ответов 5
Метки нет (Все метки)

Программировать начал недавно, много проблем в знаниях функций, вот задачка:
"Сформировать текстовый файл 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++
Привет! Нужна помощь специалиста) Подскажите, пожалуйста, как из файла filename.txt, в котором содержится матрица из 1000 на 5, записать...

Работа с файлами - C++
Почему программа не читает из файла матрицу, а просто выводит мне пустую консоль? #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include...

Работа с файлами - C++
Помогите исправить ошибки, не знаю, как убрать бесконечный цикл. Дан текстовый файл. В нем записаны слова. Во второй файл записать самое...

Работа с файлами - C++
Добрый вечер! Помогите, есть какая - то лажа: код компилится но консоль виснет и в файл ничего не записывается. #include...

Си, работа с файлами - C++
помогите пожалуйста написать прогамму на Си, вот само задание: подготовьте текстовый файл, который состоит из строк, содержащих...

Работа с файлами - C++
Добрый день. Мне необходимо считать из 2 папок текстовые файлы( имя как латиница,так и кириллица). После этого сравнить их содержимое и в...

Работа с файлами в C, C++ - C++
Есть, файл в котором храниться много чисел типа double Файл был записан следующим образом FILE * yy1; ...

работа с файлами - C++
мне бы надо на C........... помогите пожалуйста, а то чет не могу разобраться #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include...

Работа с файлами - C++
Помогите написать программу, я даже не знаю к чему взяться! Я с файлами пока не дружу! Спасибо всем кто откликнется) Дано текстовый файл,...

работа с файлами - C++
Дан текстовый файл и строка s. Если самая длинная строка файла не совпадает со строкой s, то строку s дописать в конец файла. Помогите...

Работа с файлами - C++
В радиоателье хранятся квитанции о сданных в ремонт телевизорах. Каждая квитанция содержит марку телевизора, дату приемки в ремонт,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
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
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
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
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
09.06.2011, 15:03     Работа с файлами, новичек ищет совета. #6
На какой вопрос?

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

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