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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отладка программы, Помогите отладить программу 
:(
    Опции темы
texcel
Дата 3.3.2009, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Написал программу, не могу найти ошибку, помогите.
Код

#include "my_class.h"
#include <WINERROR.H>
#include <windows.h>


my_class::my_class(void)
{
    in=0;
    out=0;
}
int my_class::open_txt_file(char* filename){
    
    my_class::file_name= (char*)malloc(sizeof(filename));
    strcpy(my_class::file_name,filename);
    strcat(filename,".txt");    
    if((my_class::in = fopen(filename,"r"))==0){
        printf("Can't open file: %s!",filename);
    }
    return 0;
}
int my_class::create_dat_file(){
    strcat(my_class::file_name,".dat");    
    if((my_class::out = fopen(my_class::file_name,"w"))==0){
        printf("Can't open file: %s!",my_class::file_name);
    }
    return 0;
}
bool num_1(char s[10]){
    int n=0;
    for(int i=0; i<10;i++){
        if(s[i]=='1')n++;
    }
    if(n>=3) 
        return true; 
    else 
        return false;
}
int fact(int a){
    int b=1;
    for(int i=1;i<=a;i++) b=b*a;
    return b;
}
int sort(char* &buf,int size){
    for(int i=0;i<fact(size)-1;i++){
        char a;
        if(buf[i]>buf[i+1]){
            a= buf[i];
            buf[i]=buf[i+1];
            buf[i+1]=a;
        }
    }
    return 0;
    
}
int my_class::_do(){
    FILE* f= my_class::in;
    FILE* f1= my_class::out;
    if(!f||!f1) RaiseException(ERROR_NO_MORE_FILES,0,0,0);
    char* b= my_class::buf;
    fseek(f,0,SEEK_END);
    my_class::n= ftell(f);
    fseek(f,0,0);
    b= (char*)malloc(n);
    fread(b,n,1,f);
    sort(buf,n);
    fwrite(b,n,1,f1);
    return 0;

}
int my_class::close_all(){
    fclose(my_class::in);
    fclose(my_class::out);

    return 0;
}




Код

#include "my_class.h"

int main(){
    char s1[255];
    my_class s;
    printf("Type file name: ");
    scanf("%s",s1);
    s.open_txt_file(s1);
    s.create_dat_file();
    s._do();
    s.close_all();
    return 0;
}


Заголовочный файл
Код

public:
    my_class(void);
    int open_txt_file(char* filename);
    int create_dat_file();
    int _do();
    int close_all();
protected:
    FILE* in;
    FILE* out;
    char* file_name;
    char* buf;
    int n;

    

};


Само задание:
1.Все поля класса должны иметь тип доступа private.
2. Если метод вызывается извне, то его тип public, иначе – private.
3. Интерфейс  класса  разместите в заголовочном файле, а реализацию класса и главную функцию – в двух отдельных файлах.

1. Реализуйте класс, содержащий следующие методы работы с текстовым файлом:
1) Открыть файл с расширением  .txt
2) Создать новый файл с тем же именем и расширением  .dat
3) Записать в новый файл слова из старого файла в алфавитном порядке.
4) Закрыть оба файла.
PM MAIL   Вверх
azesmcar
Дата 3.3.2009, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



texcel, может немного опишешь проблему?
PM   Вверх
texcel
Дата 3.3.2009, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Выдаед ошибку в этой функции.
Код

int sort(char* &buf,int size){
    for(int i=0;i<fact(size)-1;i++){
        char a;
        if(buf[i]>buf[i+1]){
            a= buf[i];
            buf[i]=buf[i+1];
            buf[i+1]=a;
        }
    }
    return 0;
    
}


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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 14.7.2008
Где: Владивосток.

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



По-моему так нельзя:

Цитата

char* &buf


указатели на ссылки и ссылки на указатели недопустимы.

Наверно нужно убрать символ '&'.

Это сообщение отредактировал(а) Avaj - 3.3.2009, 08:36
PM MAIL   Вверх
texcel
Дата 3.3.2009, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



На этой строчке :
Код

if(buf[i]>buf[i+1]){


выдает такую ошибку- Unhandled exception at 0x004118da in 1_6.exe: 0xC0000005: Access violation reading location 0xcccccccc.
PM MAIL   Вверх
azesmcar
Дата 3.3.2009, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Давай немного изменим твою программу..так и работает, и выглядет немного лучше, подправь под свои нужды

Код

#include <list>
#include <fstream>
#include <algorithm>
#include <iostream>
#include <string>

class FileConverter
{
public:
    FileConverter& operator << (const std::string& file) {
        std::ifstream stream(file.c_str(), std::fstream::in);
        
        if (!stream.is_open())
            throw std::runtime_error("Cannot open the file " + file);

        std::string line;

        while (getline(stream, line, '\n'))
            content_.push_back(line);

        stream.close();
        return *this;
    }

    FileConverter& operator >> (const std::string& file) {
        content_.sort();

        std::ofstream stream(file.c_str(), std::fstream::out);

        if (!stream.is_open())
            throw std::runtime_error("Cannot open the file " + file);

        std::copy(content_.begin(), content_.end(), std::ostream_iterator<std::string>(stream, "\n"));
        stream.close();
        return *this;
    }
private:
    std::list<std::string> content_;
};

int main() {
    std::string input;
    
    std::cout << "Input file: ";
    std::cin >> input;

    FileConverter convert;
    try
    {
        convert << input >> input + ".dat";
        std::cout << "File successfully converted" << std::endl;
    }
    catch (std::exception& e)
    {
        std::cerr << e.what() << std::endl;
    }
    return 0;
}


Добавлено через 2 минуты и 31 секунду
Цитата

if(buf[i]>buf[i+1]){


видимо перешел границы массива - buf[i+1] не существует. У меня твоя програмка так и не заработала, при вводе имени файла она вылетает, не стал рассматривать подробнее, решил сразу переписать smile
PM   Вверх
zim22
Дата 3.3.2009, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Avaj @  3.3.2009,  08:33 Найти цитируемый пост)
указатели на ссылки и ссылки на указатели недопустимы.

ссылка на указатель допустима в параметрах функции, если мы хотим, чтобы функция изменяла не только значение по указателю но и также сам адрес указателя.
Если же мы будем использовать просто указатель в качестве параметра функции , то после выхода из функции указатель будет снова указывать на прежнее значение. Лучше код приведу, а то так много слов написал smile
Код
void func1(int *&v)
{
    *v = 666;
    v = 0;
}

void func2(int *v)
{
    *v = 666;
    v = 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int *x = new int(5);
    func2(x);
    func1(x);
    return 0;
}





--------------------
PM MAIL   Вверх
xvr
Дата 3.3.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Твой my_class::buf указатель, причем не инициализированный. А ты его сортируешь, ну нельзя так  с ним smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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