С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 07.12.2014
Сообщений: 119

Запись в файл работа с текстом меню и файлы

20.04.2015, 23:20. Показов 2330. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, поскажите в чем может быть проблема, реализовал задачу через файлы и меню
Суть задачи мы записываем в файл текст далее обрабатываем его таким образом, что у нас печатаются слова отличные от последнего предварительно удаляются первые буквы из каждого

Текст записывается, я могу его просмотреть, но обработанный текст он выводит не так как нужно, в чем может быть проблема???? пожалуйста помогите








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
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <fstream>
 
using namespace std;
 
int newfile();
char f1[20], v;
int m, i, j, k, h, b[10], z,l;
char f2[20], e[20], txt[1000], a[10][255],c[10][255];
void obrabotka();
void prosmotr();
int menu, n, s;
int main()
{
    setlocale(0, "Rus");
    do {
        printf("\n\t МЕНЮ \n\t 1.Создание исходного файла\n\t 2.Обработка данных\n\t 3.Просмотр содержимого файла\n\t 4.Выход\n");
        printf("\n Выберете пункт меню: ");
        cin >> menu;
        switch (menu)
        {
        case 1: printf("\n -> Создание исходного файла\n\n"); newfile(); break;
        case 2: printf("\n -> Обработка данных\n\n"); obrabotka(); break;
        case 3: printf("\n -> Просмотр содержимого файла\n\n"); prosmotr(); break;
        case 4: break;
        }
    } while (menu != 4);
    return 0;
}
int newfile()
{
 
    FILE *f;
    printf("Введите имя файла (f1): ");
    cin >> f1;
    f = fopen(f1, "w");
    cout << "Введи текст: ";
    cin.ignore();
    gets(txt);
    fprintf(f, "%s ", txt);
    fclose(f);
    cout << "Текст успешно записан в файл!";
    return 0;   
}
 
    void obrabotka()
    {
        FILE *r;
        FILE *g;
 
        printf("Введите имя исходного файла (f1): ");
        cin >> f1;
        r = fopen(f1, "r");
        printf("Введите имя для записи обработоного файла (f2):");
        cin >> f2;
        g = fopen(f2, "w");
        k = 0;
        z = 0;
        i = 0;
        l = strlen(txt);
        while (i < l)//разбиение на массив слов
        {
            if (txt[i] != ' ')
            {
                a[k][z] = txt[i];
                z++;
                b[k] = z;
            }
            else
            {
                a[k][z] = '\0';
                k++;
                z = 0;
            }
            i++;
        }
            h = 0;
 
            for (i = 0; i < k; i++)
            {
                if (strcmp(a[k], a[i]) != 0)//формирование массива слов с[h][j] которые отличны от последнего
                {
                    for (j = 0; j < strlen(a[i]); j++)
                        c[h][j] = a[i][j];
                    h++;
                }
            }
            for (i = 0; i < h; i++)//удаление первой буквы
            {
                for (j = 0; j < strlen(c[i]); j++)
                    c[i][j] = c[i][j + 1];
            }
 
            for (i = 0; i < h; i++)
 
            
            fprintf(g,"%c ", c[i]);
            fclose(g);
            fclose(r);
 
        }
    
 
 
void prosmotr()
{
 
    FILE *g;
    printf("\n Введите имя файла: ");
    cin >> e;
    g = fopen(e, "r");
    cout << "\n Чтение из файла " << e << ": ";
    while ((v = fgetc(g)) != EOF)
    {
        printf("%c", v);
    }
    fclose(g);
}
Миниатюры
Запись в файл работа с текстом меню и файлы  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.04.2015, 23:20
Ответы с готовыми решениями:

Файлы, меню, работа с текстом
Добрый вечер, помогите пожалуйста найти ошибку в алгоритме, написал программу в которой задан текст, и нужно напечатать все слова отличные...

Файлы. Создать текстовый файл с произвольным текстом и через меню предусмотреть действия
Помогите пожалуйста с решением задачи! Создать текстовый файл с произвольным текстом и через меню предусмотреть следующие действия: ...

Файлы. Работа с текстом
Добрый день! Задание: Удалить из текста каждое N-е вхождение в него заданного слова. Подскажите, что не так сделал. Я хотел подсчитать...

18
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
20.04.2015, 23:52
Цитата Сообщение от guard_2007 Посмотреть сообщение
Текст записывается, я могу его просмотреть,
Какой текст? Исходный или обработанный?

Добавлено через 3 минуты
Цитата Сообщение от guard_2007 Посмотреть сообщение
C++
1
2
for (i = 0; i < h; i++)
    fprintf(g,"%c ", c[i]);
Тут что в файл записываешь?
0
1 / 1 / 0
Регистрация: 07.12.2014
Сообщений: 119
20.04.2015, 23:56  [ТС]
Исходный, записываю массив в котором все слова отличны от последнего и удалены первые буквы в каждом слове
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
20.04.2015, 23:59
Цитата Сообщение от guard_2007 Посмотреть сообщение
записываю массив в котором все слова отличны от последнего и удалены первые буквы в каждом слове
Если слова, то почему тогда "%c" ?
0
1 / 1 / 0
Регистрация: 07.12.2014
Сообщений: 119
21.04.2015, 00:09  [ТС]
Если поставить этот параметр %s то он выводит ошибку рода "Необработаное исключение по адресу нарушение прав доступа при чтении по адресу"

Не понимаю что она может означать, сама ошибка появляется при чтении обработаного файла

Среда разработки Visual studio 2013
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
21.04.2015, 00:12
Тебе не кажется, что при таком копировании, в c[h][j] не будет '\0' ?
Цитата Сообщение от guard_2007 Посмотреть сообщение
C++
1
2
3
4
5
6
if (strcmp(a[k], a[i]) != 0)//формирование массива слов с[h][j] которые отличны от последнего
{
     for (j = 0; j < strlen(a[i]); j++)
          c[h][j] = a[i][j];
     h++;
}
0
1 / 1 / 0
Регистрация: 07.12.2014
Сообщений: 119
21.04.2015, 00:24  [ТС]
Ну все работало, я эту же задачу реализовывал через функции без файлов и все работало, мне препод сказал скопируй весь цикл обработки и запиши его в одну функцию в файлах



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
#include<iostream>
#include<stdlib.h>
#include<string.h>
 
using namespace std;
char a[10][255], txt[1000], c[10][255];
int k, z, i, h, l, b[10],j;
//unsigned int j;
char TEKST(char txt[]);
void DEL(char c[10][255]);
void MASS(char a[10][255], int k, char c[10][255]);
 
 
 
int main()
{
    setlocale(LC_ALL, "Rus");
    cout << "Введите текст:\n";//Вводим исходный текст
    gets_s(txt);
    TEKST(txt);
    MASS(a, k, c);
    DEL(c);
    cout << "\nРезультат: \n";
 
    for (i = 0; i < h; i++)
        cout << c[i] << " ";
    cout << endl;
    cout << "\n\n";
    system("pause");
    return 0;
}
char TEKST(char txt[])
{
    int i;
    k = 0;
    z = 0;
    i = 0;
    l = strlen(txt);//Подсчитываем кол-во символов в строке
    while (i<l)
    {
        if (txt[i] != ' ')
        {
            a[k][z] = txt[i];
            z++;
            b[k] = z;
        }
        else
        {
            a[k][z] = '\0';
            k++;
            z = 0;
        }
        i++;
    }
    return a[k][z];
}
 
void DEL(char c[10][255])
{
    for (i = 0; i < h; i++)
    {
        for (j = 0; j < strlen(c[i]); j++)
            c[i][j] = c[i][j + 1];
    }
 
}
 
void MASS(char a[10][255], int k, char c[10][255])
{
    h = 0;
    int i;
    for (i = 0; i<k; i++)
    {
        if (strcmp(a[k], a[i]) != 0)
        {
            for (j = 0; j < strlen(a[i]); j++)
                c[h][j] = a[i][j];
                h++;
        }
    }
 
}
Миниатюры
Запись в файл работа с текстом меню и файлы  
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
21.04.2015, 00:34
Цитата Сообщение от guard_2007 Посмотреть сообщение
Ну все работало,
Я тебя не об этом спрашивал.

Добавлено через 1 минуту
Отладчиком умеешь пользоваться? Перед записью в файл, посмотри, как выглядит сформированный массив.
0
1 / 1 / 0
Регистрация: 07.12.2014
Сообщений: 119
21.04.2015, 00:47  [ТС]
Примерно вот так

Вывел: sa
Миниатюры
Запись в файл работа с текстом меню и файлы  
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
21.04.2015, 00:51
Терминальные ноли у тебя будут, но только из-за того, что массивы глобальные и инициализируются нолями при объявлении.
Вот так сделай запись в файл (после обработки):
C++
1
2
3
4
5
for (i = 0; i < h; i++)
{
     if (strcmp(c[i], "") != 0)
           fprintf(g,"%s ", c[i]);
}
0
1 / 1 / 0
Регистрация: 07.12.2014
Сообщений: 119
21.04.2015, 01:13  [ТС]
Изменил запись файла, после просмотра содержимого обработанного файла выдает вот это

До записи массив так и остается со словом sa
Миниатюры
Запись в файл работа с текстом меню и файлы  
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
21.04.2015, 01:19
Хотя, и просто так должно работать:
C++
1
2
3
4
for (i = 0; i < h; i++)
{
     fprintf(g,"%s ", c[i]);
}
Не понятно откуда у тебя эта ошибка берётся.
Миниатюры
Запись в файл работа с текстом меню и файлы  
0
1 / 1 / 0
Регистрация: 07.12.2014
Сообщений: 119
21.04.2015, 01:25  [ТС]
Наверное компилятор мудрит, а что вы используете?
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
21.04.2015, 01:27
Этот код попробуй:
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
int main()
{
    setlocale(0, "Rus");
    do {
        printf("\n\t МЕНЮ \n\t 1.Создание исходного файла\n\t 2.Обработка данных\n\t 3.Просмотр содержимого файла\n\t 4.Выход\n");
        printf("\n Выберете пункт меню: ");
        cin >> menu;
        switch (menu)
        {
        case 1: printf("\n -> Создание исходного файла\n\n"); newfile(); break;
        case 2: printf("\n -> Обработка данных\n\n"); obrabotka(); break;
        case 3: printf("\n -> Просмотр содержимого файла\n\n"); prosmotr(); break;
        case 4: break;
        }
    } while (menu != 4);
    return 0;
}
int newfile()
{
 
    FILE *f;
    printf("Введите имя файла (f1): ");
    cin >> f1;
    f = fopen(f1, "w");
    cout << "Введи текст: ";
    cin.ignore();
    gets(txt);
    fprintf(f, "%s ", txt);
    fclose(f);
    cout << "Текст успешно записан в файл!";
    return 0;   
}
 
    void obrabotka()
    {
        FILE *r;
        FILE *g;
 
        printf("Введите имя исходного файла (f1): ");
        cin >> f1;
        r = fopen(f1, "r");
        printf("Введите имя для записи обработоного файла (f2):");
        cin >> f2;
        g = fopen(f2, "w");
        k = 0;
        z = 0;
        i = 0;
        l = strlen(txt);
        while (i < l)//разбиение на массив слов
        {
            if (txt[i] != ' ')
            {
                a[k][z] = txt[i];
                z++;
                b[k] = z;
            }
            else
            {
                a[k][z] = '\0';
                k++;
                z = 0;
            }
            i++;
        }
            h = 0;
 
            for (i = 0; i < k; i++)
            {
                if (strcmp(a[k], a[i]) != 0)//формирование массива слов с[h][j] которые отличны от последнего
                {
                    for (j = 0; j < strlen(a[i]); j++)
                        c[h][j] = a[i][j];
                    h++;
                }
            }
            for (i = 0; i < h; i++)//удаление первой буквы
            {
                for (j = 0; j < strlen(c[i]); j++)
                    c[i][j] = c[i][j + 1];
            }
 
            for (i = 0; i < h; i++)
            {
                fprintf(g,"%s ", c[i]);
            }
            fclose(g);
            fclose(r);
 
        }
    
 
 
void prosmotr()
{
 
    FILE *g;
    printf("\n Введите имя файла: ");
    cin >> e;
    g = fopen(e, "r");
    cout << "\n Чтение из файла " << e << ": ";
    char temp[255];
    while (fgets(temp, 255, g))
    {
        printf("%s", temp);
    }
    fclose(g);
}
Добавлено через 47 секунд
Цитата Сообщение от guard_2007 Посмотреть сообщение
Наверное компилятор мудрит, а что вы используете?
Навряд, ли. У меня 10-я студия. Ты за один запуск код пробуешь? То есть: создал, обработал, вывел?
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
21.04.2015, 01:37
Лучший ответ Сообщение было отмечено guard_2007 как решение

Решение

Вот в 13-й.
Миниатюры
Запись в файл работа с текстом меню и файлы  
1
1 / 1 / 0
Регистрация: 07.12.2014
Сообщений: 119
21.04.2015, 01:38  [ТС]
Ошибка теперь не вылетает но чтение из файла опять выдает sa при тестовом варианте abs abs abs dsa abs.

Да, за один
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
21.04.2015, 01:40
Цитата Сообщение от guard_2007 Посмотреть сообщение
но чтение из файла опять выдает sa при тестовом варианте abs abs abs dsa abs.
А что он должен выдать?
0
1 / 1 / 0
Регистрация: 07.12.2014
Сообщений: 119
21.04.2015, 01:43  [ТС]
Ой из за не внимательности и сонности незаметил, все тогда замечательно

Спаасибо вам большое!!!
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
21.04.2015, 08:09
Цитата Сообщение от guard_2007 Посмотреть сообщение
все тогда замечательно
Теперь насчёт кривизны кода (одной из причин которой являестя то, о чём я писал в 6 и 10 постах).
Сначала сделай такой ввод (по 6 букв в 6 словах): wwwwww rrrrrr wwwwww tttttt wwwwww
Обработака, вывод. Вроде бы, всё пока правильно. Не выходя из программы, опять сделай ввод, теперь вот такой (по 3 буквы в 4 словах): qqq zzz vvv qqq
Обработка, и посмотри, что получится в результате.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2015, 08:09
Помогаю со студенческими работами здесь

Файлы, работа с текстом
Огромная просьба помочь!! Мне очень нужно написать программу, которая будет считывать текст из файла и копировать все слова длиной от l1 до...

файл. работа с текстом.
Уважаемые Эксперты помогите написать программу. в файле записаны слова через пробел, отсортировать их по алфавиту методом пузырька, и...

Файлы. Работа с текстом. Напечатать в алфавитном порядке все буквы, входящие в текст
помогите пожалуйста...нужна помощь с вот таким заданием... &quot;Напечатать в алфавитном порядке все буквы, входящие в текст&quot;

Составить командный файл, выводящий меню, состоящее из трех пунктов, с поясняющим текстом для любого варианта
Добрый день Уважаемые GURU ! Задали лабораторную работу ,ну пытался мыкался,ни чего не выходит,буду благодарен любой помощи! ...

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru