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

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

20.04.2015, 23:20. Показов 2395. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru