Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2020, 03:39   #1
EverMan32
Новичок
Джуниор
 
Регистрация: 28.03.2019
Сообщений: 3
По умолчанию Создать текстовый файл из других текстовых файлов используя стек

Задание: Создать текстовые файлы, содержащие один текстовую, а другой числовую информацию (количество слов и чисел может быть неодинаковым). Используя стек, создать другой текстовый файл, в котором числа и слова чередовались бы и были бы записаны в обратном порядке («лишние» числа или слова были бы записаны в конец файла).

Проблема в том, что неправильно вводятся строки(функция Input_File_1 и push1). Строки заносятся в стек и потом в файл. В файле они отображаются нормально, а вот консоли-нет. Прикрепил фото как должно быть. И ещё в функции Input_File_3 не знаю, как быть с циклом, если ставить не бесконечный, то вводится не всё, а если бесконечный, то непонятно, как его закрыть.
Код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
typedef struct Stack1
{
    char* data1;
    int count1;
    int size1;
}Stack1;
typedef struct Stack2
{
    int* data2;
    int count2;
    int size2;
}Stack2;
int menu();
Stack1 s1;
Stack2 s2;
void Input_File_1(FILE* F1, Stack1* p1);
void Creation_Stack_1(Stack1* p1);
void push1(Stack1* p1, char* value1);
void pop1(Stack1* p1);
void Input_File_2(FILE* F2, Stack2* p2);
void Creation_Stack_2(Stack2* p2);
void push2(Stack2* p2, int value2);
void pop2(Stack2* p2);
void Input_File_3(FILE* F3, Stack1* p1, Stack2* p2);
int main() //главная функция
{
    Stack1 s1;
    Stack2 s2;
    system("chcp 1251");
    system("cls");
    FILE* F1 = NULL, * F2 = NULL, * F3 = NULL;
    while (1)
    {
        switch (menu())
        {
        case 1:
            Creation_Stack_1(&s1);
            Input_File_1(F1, &s1);
            break;
        case 2:
            Creation_Stack_2(&s2);
            Input_File_2(F2, &s2);
            break;
        case 3:
            Input_File_3(F3, &s1, &s2);
            break;
        case 4: return 0; break;
        default: printf("\nВыберите допустимый вариант!\n");
        }
    }
}
int menu()
{
    int choose;
    printf("Выберите:\n");
    printf("1 Создание текстового файла\n");
    printf("2 Создание числового файла\n");
    printf("3 Создание стека и запись в 1-го и 2-го файлов в 3-ий файл\n");
    printf("4 Выход\n");
    printf("Ваш выбор:");
    while (scanf_s("%d", &choose) == 0 && (choose = getchar()) < '0' || choose > '9')
    {
        printf("Некорректный ввод.\n");
    }
    printf("\n");
    return choose;
}
void Input_File_1(FILE* F1, Stack1* p1)
{
    int i;
    char* value1;
    printf("Введите количество слов:");
    while (scanf_s("%d", &p1->size1) == 0 && (p1->size1 = getchar()) < '1' || p1->size1 > '9')
    {
        printf("Некорректный ввод.\n");
    }
    F1 = fopen("F1.txt", "w");
    value1 = (char*)malloc(p1->size1 * sizeof(char));
    p1->data1 = (char*)malloc(p1->size1 * sizeof(char));
    printf("Введите текстовые данные:\n");
    for (i = 0; i < p1->size1; i++)
    {
        scanf("%s", &value1[0]);
        push1(p1, &value1[0]);
        fprintf(F1, "%s\n", p1->data1 + i);
    }
    fclose(F1);
}
void Creation_Stack_1(Stack1* p1)
{
    p1->count1 = 0;
}
void push1(Stack1* p1, char* value1)
{
    strcpy(&p1->data1[p1->count1], value1);
    p1->count1++;
}
void pop1(Stack1* p1)
{
 p1->count1--;
}

void Input_File_2(FILE* F2, Stack2* p2)
{
    int i, value2;
    printf("Введите количество чисел:");
    while (scanf_s("%d", &p2->size2) == 0 && (p2->size2 = getchar()) < '1' || p2->size2 > '9')
    {
        printf("Некорректный ввод.\n");
    }
    F2 = fopen("F2.txt", "w");
    p2->data2 = (int*)malloc(p2->size2 * sizeof(int));
    printf("Введите числовые данные:\n");

    for (i = 0; i < p2->size2; i++)
    {
        scanf("%d", &value2);
        push2(p2, value2);
        fprintf(F2, "%d\n", *(p2->data2 + i));

    }
    fclose(F2);
}
void Creation_Stack_2(Stack2* p2)
{
    p2->count2 = 0;
}
void push2(Stack2* p2, int value2)
{
    p2->data2[p2->count2] = value2;
    p2->count2++;
}
void pop2(Stack2* p2)
{
    p2->count2--;
}
void Input_File_3(FILE* F3, Stack1* p1, Stack2* p2)
{
    p1->count1--;
    p2->count2--;
    F3 = fopen("F3.txt", "w");
    for (; (p1->count1 && p2->count2) >= 0;)
    {
        if (p2->count2 >= 0)
        {
            fprintf(F3, "%d\n", p2->data2[p2->count2]);
            pop2(p2);
        }
        if (p1->count1 >= 0)
        {
            fprintf(F3, "%s\n", &p1->data1[p1->count1]);
            pop1(p1);
        }
    }
    fclose(F3);
}
Изображения
Тип файла: jpg 123.jpg (33.1 Кб, 0 просмотров)
EverMan32 вне форума Ответить с цитированием
Старый 13.04.2020, 11:21   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Код:
value1 = (char*)malloc(p1->size1 * sizeof(char));
- по-моему, тут утечка памяти, нет free для этого блока

по вопросу ничего не отвечу, разбираться в этой каше нет желания, уж извини ))
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Используя классы создать стек shilovec5377 Общие вопросы C/C++ 1 13.05.2015 11:45
Написать обработчик текстовых файлов, что создает текстовый файл в который слова будут написаны наоборот SAnastasi Паскаль, Turbo Pascal, PascalABC.NET 1 26.05.2014 17:35
Стек и текстовый файл (java) gtr35 Помощь студентам 0 18.12.2013 22:08
Создать текстовый файл, строки которого содержат целые числа. Обработать файл следующим образом: напечатать все отрицательные... Anton94.by Паскаль, Turbo Pascal, PascalABC.NET 2 08.02.2012 19:23
Как создать сводный файл из 700 других файлов? robbe Microsoft Office Excel 8 24.03.2010 12:38