Работа С Файлами

Тема в разделе "C/C++/C#", создана пользователем kingl, 30 ноя 2013.

Статус темы:
Закрыта.
  1. kingl

    kingl New Member

    Регистрация:
    30 окт 2013
    Сообщения:
    2
    Симпатии:
    0
    Составить программу, реализующую функции указанного ниже меню. Выполнить функциональное разбиение программного кода.

    Меню программы:
    1 – Сформировать с клавиатуры строку и записать в файл (строка может содержать пробелы);
    2 – Считать строку из файла и распечатать;
    3 – Зашифровать строку и записать в файл;
    4 – Расшифровать строку и записать в файл;
    5 – Выход.

    Четные и нечетные символы меняются местами.

    Вот что у меня получилось, все работает, но если сразу допустим 4 пункт меню выбрать, пропуская первый, то есть ничего не записывая в файл - виснет, а должно выводить ошибку. и функция "default" тоже не работает. Вот мой код:
    #include <io.h>
    #include <stdio.h>
    #include <conio.h>
    #include <locale.h>
    #include <string.h>
    #include <windows.h>
    #include <ShellAPI.h>

    void f(char*, char*);

    void main()
    {
    char Str1[100] = "";
    char Str2;
    unsigned char pm, i=0, j=0;

    setlocale(LC_CTYPE, "Russian");

    FILE *fl;

    for(;;)
    {
    puts("Выберите действие: \n");
    puts("1. Сформировать строку и записать в файл");
    puts("2. Считать строку и распечатать");
    puts("3. Зашифровать строку и записать в файл");
    puts("4. Расшифровать строку и записать в файл");
    puts("5. Выход.\n");

    pm=_getch();

    switch(pm)
    {
    case '1':
    if((fl=fopen("fl.txt", "w"))!=NULL) // Открываем файл только для записи
    {
    puts("Введите строку: \n");
    SetConsoleCP(1251);
    gets(Str1); //Ввод строки
    fputs(Str1, fl); // запись строки в файл
    SetConsoleCP(866);
    fclose(fl); //Закрыть файл после записи

    puts("Строка записана успешно \n");
    }
    else
    {
    puts("Ошибка при открытии файла \n");
    }
    break;

    case '2':
    if ((fl=fopen("fl.txt", "r"))!=NULL) // Открываем файл только для чтения
    {
    puts("Строка из файла: \n");
    fgets(Str1, 100, fl); //Считывание строки из файла
    puts(Str1);
    printf("\n");
    fclose(fl);
    }
    else
    {
    puts("Ошибка при открытии файла \n");
    }
    break;

    case '3':
    if ((fl=fopen("fl.txt", "w+"))!=NULL) // Открываем файл для чтения и записи
    {
    puts("Исходная строка:");
    puts(Str1);
    fgets(Str1, 100, fl);
    printf("\n");

    f(str1, str2);

    SetConsoleCP(1251);
    fputs(Str1, fl);
    SetConsoleCP(866);
    puts("Зашифрованная строка:");
    puts(Str1);
    printf("\n");
    fclose(fl);

    puts("Строка успешно записана в файл \n");
    }
    else
    {
    puts("Ошибка при открытии файла \n");
    }
    break;

    case '4':
    if((fl=fopen("fl.txt", "w+"))!=NULL) // Открываем файл для чтения и записи
    {
    puts("Исходная строка в файле:");
    puts(Str1);
    fgets(Str1, 100, fl);
    printf("\n");

    f(str1, str2);

    SetConsoleCP(1251);
    fputs(Str1, fl);
    SetConsoleCP(866);
    puts("Расшифрованная строка:");
    puts(Str1);
    printf("\n");
    fclose(fl);
    }
    else
    {
    puts("Ошибка при открытии файла \n");
    }
    break;

    case '5':
    return;
    default:
    puts("Введите значение от 1 до 5 \n");
    break;

    }
    }
    }

    void f( char *str1, char *str2)
    {
    for(int i=0; i<strlen(Str1)-1; i++)
    { if(i%2==0) // Замена четного символа на нечетный
    {
    Str2=Str1;
    Str1=Str1[i+1];
    Str1[i+1]=Str2;
    }
    }
     
  2. kingl

    kingl New Member

    Регистрация:
    30 окт 2013
    Сообщения:
    2
    Симпатии:
    0
    Вот полностью рабочий код

    Код (Text):
    #include <io.h>
    #include <stdio.h>
    #include <conio.h>
    #include <locale.h>
    #include <string.h>
    #include <windows.h>
    #include <ShellAPI.h>

    void F( char*, char*);

    void main()
    {
    char *Str1;
    char *Str2;
    unsigned char pm;

    setlocale(LC_CTYPE, "Russian");

    FILE *fl;

    Str = (char *)malloc((100)*sizeof(char)); // Динамическое выделение памяти
    if (Str == NULL)
    {
    puts("Предел размерности ! ");
    exit(0);           
    }  

    Str1 = (int *)malloc((100)*sizeof(int));
    if (Str1 == NULL)
    {
    puts("Предел размерности ! ");
    exit(0);           
    }  
    for(;;)
    {
    puts("Выберите действие: \n");
    puts("1. Сформировать строку и записать в файл");
    puts("2. Считать строку и распечатать");
    puts("3. Зашифровать строку и записать в файл");
    puts("4. Расшифровать строку и записать в файл");
    puts("5. Выход.\n");

    pm=_getch();

    switch(pm)
    {
    case '1':
    if((fl=fopen("fl.txt", "w"))!=NULL)
    {
    puts("Введите строку: \n");
    SetConsoleCP(1251);
    gets(Str1);
    fputs(Str1, fl);
    SetConsoleCP(866);
    fclose(fl);

    puts("Строка записана успешно \n");
    }
    else
    {
    puts("Ошибка при открытии файла \n");
    exit(1);
    }
    break;

    case '2':
    if((fl=fopen("fl.txt", "r"))==NULL)
    {
    printf("Не удается открыть файл.\n");
    exit(1);
    }
    if (Str1[0])
    {
    puts("Строка из файла: \n");
    fgets(Str1, 100, fl);
    puts(Str1);
    printf("\n");
    fclose(fl);
    }
    else
    {
    puts("Сначала выполните пункт 1 \n");
    }
    break;

    case '3':
    if((fl=fopen("fl.txt", "w+"))==NULL)
    {
    printf("Не удается открыть файл.\n");
    exit(1);
    }
    if (Str1[0])
    {
    puts("Исходная строка:");
    puts(Str1);
    fgets(Str1, 100, fl);
    printf("\n");

    F(Str1, Str2);

    SetConsoleCP(1251);
    fputs(Str1, fl);
    SetConsoleCP(866);
    puts("Зашифрованная строка:");
    puts(Str1);
    printf("\n");
    fclose(fl);

    puts("Строка успешно записана в файл \n");
    }
    else
    {
    puts("Сначала выполните пункт 1 \n");
    }
    break;

    case '4':
    if((fl=fopen("fl.txt", "w+"))==NULL)
    {
    printf("Не удается открыть файл.\n");
    exit(1);
    }
    if(Str1[0])
    {
    puts("Исходная строка в файле:");
    puts(Str1);
    fgets(Str1, 100, fl);
    printf("\n");

    F(Str1, Str2);
    SetConsoleCP(1251);
    fputs(Str1, fl);
    SetConsoleCP(866);
    puts("Расшифрованная строка:");
    puts(Str1);
    printf("\n");
    fclose(fl);
    }
    else
    {
    puts("Сначала выполните пункт 1 \n");
    }
    break;

    case '5':
    return;
    default:
    puts("Введите значение от 1 до 5 \n");
    break;
    }
    }
    }

    void F( char *str1, char *str2)
    {
    for(int i=0; i<strlen(str1)-1; i++)
    {          
    if(i%2==0)
    {
    *str2=str1[i];
    str1[i]=str1[i+1];
    str1[i+1]=*str2;
    }
    }
    }
     
Загрузка...
Похожие Темы - Работа Файлами
  1. gx6060
    Ответов:
    2
    Просмотров:
    414
  2. seoman2
    Ответов:
    21
    Просмотров:
    766
  3. NickProstoNick
    Ответов:
    22
    Просмотров:
    1.520
  4. vladis222
    Ответов:
    3
    Просмотров:
    1.127
  5. Lyuska
    Ответов:
    1
    Просмотров:
    1.171
Статус темы:
Закрыта.

Поделиться этой страницей