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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2013, 01:14   #1
Kingl
 
Регистрация: 30.11.2013
Сообщений: 5
По умолчанию Работа с содержимым текстового файла

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

Меню программы:
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[i];
Str1[i]=Str1[i+1];
Str1[i+1]=Str2;
}
}


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 30.11.2013 в 12:31.
Kingl вне форума Ответить с цитированием
Старый 30.11.2013, 01:44   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

А вот
Код:
FILE *fl;
 for(;
 {
что за for какой-то странный.
type_Oleg вне форума Ответить с цитированием
Старый 30.11.2013, 01:51   #3
Kingl
 
Регистрация: 30.11.2013
Сообщений: 5
По умолчанию

это точку с запятой и скобку без пробела видимо как смайл воспринял, я его удалил и забыл исправить:
должно быть:
for ( ; ; )
{
Kingl вне форума Ответить с цитированием
Старый 30.11.2013, 08:35   #4
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Так, проверяй в 4-м пункте, Str1 пустая или нет. Или сделай переменную, которая бы хранила последовательность посещений пунктов меню. Например, при первом запуске меню бы показывало
Код:
 puts("Выберите действие: \n");
 puts("1. Сформировать строку и записать в файл");
 puts("5. Выход.\n");
А после "посещения" п.1, меню бы выглядело в полном варианте
Код:
 puts("Выберите действие: \n");
 puts("1. Сформировать строку и записать в файл");
 puts("2. Считать строку и распечатать");
 puts("3. Зашифровать строку и записать в файл");
 puts("4. Расшифровать строку и записать в файл");
 puts("5. Выход.\n");
Думаю, что это совершенно нетрудно реализовать без всяких подсказок.
FataLL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение текстового файла Елена77 C# (си шарп) 1 29.04.2013 23:28
Загрузка текстового файла DiemonStar Microsoft Office Word 6 01.04.2012 13:40
Работа с файлами и директориями. Как копировать директорию с ее содержимым в другую директорию??? Дмитрий_Попов Общие вопросы C/C++ 1 14.12.2011 21:49
чтение текстового файла Аглан Microsoft Office Access 2 15.02.2011 22:14
Из текстового файла в бд!!! Poltev86 БД в Delphi 5 16.05.2010 23:18