K
kingl
Составить программу, реализующую функции указанного ниже меню. Выполнить функциональное разбиение программного кода.
Меню программы:
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;
}
}
Меню программы:
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;
}
}