Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Realise работает а Debug версия вылетает!

12K
25 декабря 2006 года
andrystepa
24 / / 08.06.2006
Не могу нормально отладить программу! Debug версия программы почему-то вылетает с сообщением:
Цитата:

Debug assertion Failed
Program: filemodify
File: isctype.c
Line: 56

Expression: (unsigned)(c+1)<=256


Вообще то я макросов assert никуда не вставлял. Программа берет csv файл со списком телефонов, удаляет из него лишние символы (';'), и записывает полученный список телефонов в удобочитаемом виде в текстовый файл.

Код:
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>

using namespace std;
void zamchars(string& str2ed, char ch2del) //Заменяем символы ch2del на пробелы
    {
    for(int i=1; i<str2ed.length(); i++) {
        if(str2ed==ch2del) str2ed=' ';
    };
    }
void delspace(string& str2ed)               //Удаление двойных пробелов
    {
    for(int i=1; i<str2ed.length(); i++) {
        if(isspace(str2ed) && isspace(str2ed[i-1])) {
            //cout<<"In string "<<str2ed<<endl;
            //cout<<"Found double space in pos "<<i<<endl;
            str2ed=str2ed.erase(i-1, 1);
            i--;
            //cout<<"Double space erased! New string:"<<str2ed<<endl;
            //char sel;
            //cin>>sel;
            };
    };
    }

void getnewline(ifstream& infile, ofstream& outfile, int lencell)  
    {
string newstr, orgname, telnum, nextstr;
do {
    getline(infile, newstr);
    char next;
    infile.get(next);           //Проверим, не остался ли конец этой
    while(!isalpha(next))       // строки на следующих строках критерий - число
        {                       //или знак препинания.
        infile.putback(next);
        getline(infile, nextstr);
        infile.get(next);
        newstr=newstr+nextstr;
        };
    infile.putback(next);
    zamchars(newstr, ';');
    delspace(newstr);           //убираем лишние знаки и пробелы
    int i=0;
    while(!isdigit(newstr) && (newstr!='+')) i++;
    newstr.insert(i, "\n");     //Добавляем перевод строки перед номером телефона
    outfile<<setw(82)<<newstr<<endl;
    for(i=0; i<82; i++) outfile<<"-";
    outfile<<endl;              //Вывод в файл с разделением записей
    } while(!infile.eof());
    }


/*void getfileline(ifstream& infile, ofstream& outfile, int lencell) {
    string orgname, telnum, nextstr;
    do {
    getline(infile, orgname, ';');
    int len=orgname.length();
    int koeff=len/lencell;
    if((len%lencell)==0) koeff--;
    int i=1;
    while(koeff>0) { orgname.insert(lencell*i,1, '\n');
    i++;
    koeff--;
    };
    while((orgname.length()%lencell)!=0) {
        orgname.insert(orgname.length(),1,' ');
        };
    char next;
    do { infile.get(next); } while(next==';');
    if(next!=';') infile.putback(next);
    //while(next!='\n') {
        //infile.putback(next);
        getline(infile, telnum);
        infile.get(next);
        while(next==';') {
            getline(infile, nextstr);
            telnum=telnum+nextstr;
            infile.get(next);
            };
            infile.putback(next);
        for(int i=0; i<telnum.length(); i++) {
            if(telnum==';') telnum=' ';
        }
        //delchars(telnum, ' ');
        delspace(telnum);
        //do{infile.get(next); } while(next==';');
        //outfile.seekp(lencell+4);
        if(isdigit(telnum[1])) {
        outfile<<setw(82)<<orgname<<endl;
        outfile<<"      "<<setw(telnum.length()+2)
            <<setiosflags(ios::left)<<telnum<<endl;
        for(i=0; i<82; i++) outfile<<"-";
        outfile<<endl;
            };
        //infile.get(next);
        } while(!infile.eof());
    outfile<<endl;
}*/


int main() {
    /*if(argc!=3) {cout<<"Use program: filemodify infile outfile"<<endl;
    exit(1);
    }*/
    string firstfile;
    string secfile;
    cout<<"Enter input file name >";
    cin>>firstfile;
    cout<<endl<<"Enter output file name >";
    cin>>secfile;
    cout<<endl;
    ifstream fin;
    ofstream fout;
    fin.open(firstfile.c_str());
    if(fin.fail()) { cout<<"Error open "<<firstfile<<endl;
    char sel;
    cin>>sel;
    exit(1);
    }
    fout.open(secfile.c_str());
    if(fout.fail()) { cout<<"Error open "<<secfile<<endl;
    exit(1);
    }
int cell_length;
cout<<"Enter a length of Company name  cell >";
cin>>cell_length;
cout<<endl;
//getfileline(fin, fout, cell_length);
getnewline(fin, fout, 82);
fin.close();
fout.close();
return 0;
}


Частично приведу файл, на котором вылетаем:
Цитата:

Radisson SAS Slavyanskaya Hotel;80959418118;80959418668;;;;;;;
;;9518138;;;;;;;
METRO Cash&Carry OOO;80955021052;80955021096;;;;;;;
Бритиш Бродкастинг Корпорейшн;80957752957;;;;;;;;
ЮГНПЦ Прогресс;593386;8103800482593348;;;;;;;
;;;;;;;;;89161248772
МГУП Промотходы;;;;;;;80956810892;;
МГУП Промотходы;;80952380572;;80957604014;;;80954350954;;80957680586
ООО «МКФ ЭНЕРГО»;80957252426;89164484431;;;;;;;80951399815
Экоцентр;;;;;;;3531510;;
Пробирная палата России Центральная госинспекция;;80952097261;;;;;5903473;;89169606004
МГУП Промотходы;;9591618;;;;;;;89167071916
ООО «МКФ ЭНЕРГО»;;80957252426;;;;;;;89161463271
Коммерческий банк «Альта-банк» (ЗАО);;80952731357;;;;;;;
МГУП Промотходы;;80952386685;;;;;;;
ООО Филипс;80959330338;80959330339;;;;;;;1064856
МГУП Промотходы;;80959591713;;;;;;;
Московская Межбанковская Валютная Биржа;7059622;7059672;;;;;;;89161648785
ОАО МТС;7660180;9112190 доб 17561;;;;;;;89165181757
МГУП Промотходы;;80952562003;;;;;;;89161857744


Debug версия программы вылетает после вывода в новый файл строчки с:
ОАО МТС;7660180;9112190 доб 17561;;;;;;;89165181757

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

3
25 декабря 2006 года
Green
4.8K / / 20.01.2000
Смотри стек на месте появления ассерта.
Посмотри, что именно в твоей программе приводит к его появлению.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог