Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с выводом сообщения в конце программы, Проблема с выводом сообщения 
:(
    Опции темы
Lazarus Long
Дата 4.3.2010, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



Доброго времени суток!

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

прошу помочь разобраться!

Код

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>

int coding(char symbol, int key)
{int symbolCode;

 symbolCode = symbol;
 symbolCode = symbolCode + key;

 if ( symbolCode>256 )
 {symbolCode=symbolCode-256;
 }
 else if ( symbolCode<0 )
 {symbolCode=symbolCode+256;
 }
 symbol= symbolCode;

 return symbol;
}

int main(void)
{FILE *in;
 FILE *out;

 int a;
 char symbol;
 int n=0;
 int key=0;

 cout << "Start" << endl << "Input key of enciphering:";
 cin >> key;
 cout << endl << "Coding in progress...." << endl;

 if ((in=fopen( "txt.txt","r" ))==NULL)
 {printf ("Íå óäàåòñÿ îòêðûòü ôàéë.\n");
  return 1;
 }
 if ((out=freopen( "code.txt","w",stdout ))==NULL)
 {printf("Íå óäàåòñÿ îòêðûòü ôàéë.\n");
  exit(1);
 }

 while((symbol = fgetc(in)) != EOF)
 {printf("%c", coding(symbol, key));
 }
 fclose(out);
 fclose (in);

 cout << "The information is coded!" << endl;

 getch();
 return 0;
}


Заранее благодарен!
PM MAIL ICQ   Вверх
A5uKa
Дата 4.3.2010, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 2
Всего: 16



Код

 getch();
 getch();


 smile 

А первое Getch ты как бы уже нажал   smile 
PM   Вверх
bsa
Дата 5.3.2010, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Lazarus Long, перед строкой 48 поставь fflush(stdout). А на будущее, не используй без крайней необходимости работу с потоками С++ и сишные функции из stdio.h. В противном случае, нужно их синхронизировать (см. std::ios_base::sync_with_stdio). 
PM   Вверх
Lazarus Long
Дата 8.3.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



Спасибо, за проявленный интерес к моей проблеме, но советы не помогли =(
PM MAIL ICQ   Вверх
azesmcar
Дата 8.3.2010, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Lazarus Long

Ты подменяешь stdout в 41-ой строке, весь вывод пойдет в файл, но перед началом следующего вывода ты закрываешь файл.

Добавлено через 54 секунды
Где вы эти извращенства вычитываете? Уж не на лекциях ли?
PM   Вверх
Lazarus Long
Дата 8.3.2010, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



2azesmcar
Этот код, как мозаика, складывался(ется) из всевозможных примеров.

Я понял, что какого-то лешего поток, через который происходит запись в файл, не закрывается.
Но никак не могу идентифицировать этого мифического героя.

По своей сути fclose() должен был остановить работу потоков с файлами и вернуть все на прежние места, но этого не происходит....
PM MAIL ICQ   Вверх
azesmcar
Дата 8.3.2010, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Lazarus Long @  8.3.2010,  21:32 Найти цитируемый пост)
По своей сути fclose() должен был остановить работу потоков с файлами и вернуть все на прежние места

А кофе в постель подавать он не должен? Где такое написано?
PM   Вверх
Lazarus Long
Дата 8.3.2010, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



Fclose закрывает  файл,  ассоциированный с fp.  Буфер вывода, связанный с fp, перед закрытием выталкивается.

Помогите пожалуйста конструктивной критикой или советами.

PM MAIL ICQ   Вверх
azesmcar
Дата 8.3.2010, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Lazarus Long @  8.3.2010,  22:27 Найти цитируемый пост)
Помогите пожалуйста конструктивной критикой или советами.

Куда уж конструктивнее? Я тебе говорю ты буфер вывода закрывает. Вот
Код

int main()
{
    fclose(stdout);
    cout << "Hello world!!!" << endl;
}

угадай что выведет.
PM   Вверх
Lazarus Long
Дата 8.3.2010, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



2azesmcar
Понял, что Вы имеете в виду, но даже если удалить все fclose(), последнее сообщение так же не выводится. *STUPID*
PM MAIL ICQ   Вверх
azesmcar
Дата 8.3.2010, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Lazarus Long @  8.3.2010,  23:01 Найти цитируемый пост)
Понял, что Вы имеете в виду, но даже если удалить все fclose(), последнее сообщение так же не выводится. *STUPID* 

Вы не читаете то, что я пишу или читаете через строку?

Цитата(azesmcar @  8.3.2010,  20:03 Найти цитируемый пост)
весь вывод пойдет в файл


уберите вообще этот reopen, зачем он там нужен? Используйте вместо printf(...) fprintf(file, ...)
PM   Вверх
Lazarus Long
Дата 9.3.2010, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



2azesmcar
Спасибо, что напомнили про fprintf(file, ...), совсем выпало из головы.

Вот, что в конце-концов получилось:
Код

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>

//Функция кодирования (посимвольно)
int codingCezar( char symbol )
{int symbolCode;
 int key=8;

 symbolCode = symbol;
 symbolCode = symbolCode + key;
 if( symbolCode>256 )
  symbolCode=symbolCode-256;
 else if( symbolCode<0 )
  symbolCode=symbolCode+256;

 symbol=symbolCode;

 return symbol;
}

//Функция декодирования (посимвольно)
int decodingCezar( char symbol )
{int symbolCode;
 int key=8;

 symbolCode = symbol;
 symbolCode = symbolCode - key;
 if( symbolCode>256 )
  symbolCode=symbolCode-256;
 else if( symbolCode<0 )
  symbolCode=symbolCode+256;

 symbol=symbolCode;

 return symbol;
}

//Тело программы
int main(void)
{FILE *in;//файл-источник
 FILE *out;//файл-приемник
 char symbol;
 char entering[20];//название файла-источника
 char proceeding[20];//название файла-приемника
 int codORde;

 cout << "Start" << endl << "Input entering file name: ";
 cin >> entering;
 if(( in=fopen( entering,"r" ))==NULL)
 {printf ( "Cant open!\n" );
  getch();
  return 0;
 }

 cout  << "Input proceeding file name: ";
 cin >> proceeding;
 if(( out=fopen( proceeding,"w" ))==NULL)
 {printf( "Cant create!\n" );
  getch();
  return 0;
 }

 cout << "Coding(1) or decoding(2)? ";
 cin >> codORde;
 cout << "Coding in progress...." << endl;

 if( codORde==1 )
 {while(( symbol=fgetc(in))!=EOF )
  fprintf( out,"%c",codingCezar( symbol ));
 }
 else if(codORde==2)
 {while(( symbol=fgetc(in))!=EOF )
  fprintf( out,"%c",decodingCezar( symbol ));
 }
 fclose( out );
 fclose( in );

 cout << "Its done!";

 getch();
 return 0;
}

PM MAIL ICQ   Вверх
bsa
Дата 9.3.2010, 12:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Lazarus Long, ты объясни, зачем ты используешь ввод/вывод из разных библиотек по сути одновременно? Ты используй или iostream/fstream или stdio.h. Зачем кашу делать?!?
PM   Вверх
azesmcar
Дата 9.3.2010, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(bsa @  9.3.2010,  12:01 Найти цитируемый пост)
Lazarus Long, ты объясни, зачем ты используешь ввод/вывод из разных библиотек по сути одновременно? Ты используй или iostream/fstream или stdio.h. Зачем кашу делать?!? 

можно я отвечу smile 
Цитата(Lazarus Long @  8.3.2010,  21:32 Найти цитируемый пост)
Этот код, как мозаика, складывался(ется) из всевозможных примеров.


PM   Вверх
bsa
Дата 9.3.2010, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



azesmcar, мне не ответ нужен. Мне нужно понимание Lazarus Long того, что делается что-то неправильно.
PM   Вверх
Lazarus Long
Дата 11.3.2010, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



у меня мнение, что если что-то работает - значит оно работает правильно =)
по моему для элементарщины такой стиль программирования подойдет....
PM MAIL ICQ   Вверх
azesmcar
Дата 12.3.2010, 05:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Lazarus Long @  11.3.2010,  23:41 Найти цитируемый пост)
у меня мнение, что если что-то работает - значит оно работает правильно =)

Если все работает тогда в чем проблема?

Цитата(Lazarus Long @  11.3.2010,  23:41 Найти цитируемый пост)
по моему для элементарщины такой стиль программирования подойдет.... 

Смотря какую цель ты преследуешь.
PM   Вверх
bsa
Дата 12.3.2010, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Lazarus Long @  11.3.2010,  23:41 Найти цитируемый пост)
у меня мнение, что если что-то работает - значит оно работает правильно =)
совсем не обязательно. Но обратное верно: если работает правильно, то работает.  smile 

Цитата(Lazarus Long @  11.3.2010,  23:41 Найти цитируемый пост)
по моему для элементарщины такой стиль программирования подойдет.... 
По-моему, человек, у которого опыт работы с С/С++ более 10 лет, лучше знает, что подойдет, а что нет. Опытный от неопытного отличается как раз тем, что знает где грабли лежат.  smile 

PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1001 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.