Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
niks255
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 29
#1

Собранное приложение завершается с ошибкой - C++

21.05.2013, 15:58. Просмотров 1045. Ответов 26
Метки нет (Все метки)

Здравствуйте. Подскажите пожалуйста новичку. Взял приложение из учебника, переписал в Visual Studio, собрал, а оно выкидывает. Приложение делает следующее:

1. Берет текст из файла unform.txt
2. Форматирует каждую строку по ширине
3. Выводит результат в файл formatd.txt
4. Подсчитывает количество слов в тексте и выводит на экран

Проблема: если исходный файл имеет кодировку unicode, то текст не форматирует и не записывает в файл. Количество слов тоже не считает. Если исходный файл имеет любую другую кодировку (ANSI или UTF), то выкидывает при чтении из файла. Запускаю отладку в Visual Studio - запускается и завершается с кодом 0. То есть не выкидывает. Но форматированный текст не появляется в выходном файле. А запускаю из консоли - выкидывает.
Помогите разобраться. Исходники в приложенном файле. Пишу в Visual Studio 2010 Express.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
21.05.2013, 16:02     Собранное приложение завершается с ошибкой #2
niks255, а код можно?
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.05.2013, 16:02     Собранное приложение завершается с ошибкой #3
Цитата Сообщение от niks255 Посмотреть сообщение
Исходники в приложенном файле.
И где он?
niks255
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 29
21.05.2013, 16:18  [ТС]     Собранное приложение завершается с ошибкой #4
Цитата Сообщение от alsav22 Посмотреть сообщение
И где он?
Странно, вроде загрузил файл... щас повторю.
Вот, держите.
Вложения
Тип файла: 7z Task 7.7.7z (1.51 Мб, 4 просмотров)
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.05.2013, 16:59     Собранное приложение завершается с ошибкой #5
Эта функция, что должна вернуть?
C++
1
int SearchNextWord(const char*, const int);
Добавлено через 4 минуты
Цитата Сообщение от niks255 Посмотреть сообщение
2. Форматирует каждую строку по ширине
Каким образом?

Добавлено через 1 минуту
Не знаю, правильно ли работает, но если дописать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int SearchNextWord(const char* pline, const int curpos)
 
{
    int i = curpos;
    while(pline[i] != ' ')
    {
        if (pline[i] == '\n')
        return 0;
    }
    while (pline[i] == ' ' && pline[i+1] == ' ') i++;
    return i;
}
то вылетов нет.
Миниатюры
Собранное приложение завершается с ошибкой  
niks255
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 29
21.05.2013, 17:07  [ТС]     Собранное приложение завершается с ошибкой #6
Функция должна возвращать номер позиции, с которой начинается следующее слово в строке pline. А если достигнут конец строки, то 0. curpos - позиция с которой начинается поиск.
Форматировать должна выравнивая текст слева и справа путем добавления пробелов между соседними словами. А еще в отступе с левой стороны страницы на margin позиций. Результирующий текст должен находиться в позициях margin+1 ... margin+max_line.
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.05.2013, 17:12     Собранное приложение завершается с ошибкой #7
Вылет был из-за того, что возврата не было, о чём студия предупреждала (что возврат ни при всех путях выполнения).
niks255
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 29
21.05.2013, 17:15  [ТС]     Собранное приложение завершается с ошибкой #8
Вроде разобрался. Функция int SearchNextWord должна вот так выглядеть:

int SearchNextWord(const char* pline, const int curpos)

C++
1
2
3
4
5
6
7
8
9
10
{
    int i = curpos;
    while(pline[i] != ' '){
        if (pline[i] == '\n') return 0;
        i++;
    }
    while (pline[i] == ' ' && pline[i+1] == ' ') i++;
    return i+1;
 
}
Теперь другая проблема. Читает из входного файла только если он имеет кодировку ANSI. Можно сделать чтобы читал и юникод и UTF? Иначе вывод крокозябрами. Во входном файле русский текст.
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.05.2013, 17:28     Собранное приложение завершается с ошибкой #9
Цитата Сообщение от niks255 Посмотреть сообщение
Можно сделать чтобы читал и юникод и UTF?
Вот, есть такой код. Разбирайтесь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <fstream>
#include <Windows.h>
using namespace std;
 
int main()
{
    setlocale(0, ".1251"); //включили кодировку.
    //SetConsoleCP (1251); 
    //SetConsoleOutputCP (1251); // или так.
    
    char buff[500];
    wchar_t wbuff[500];
 
    ifstream f("upload.txt");
    
    f.getline(buff, 500); // в буффер char из файла UTF-8.
    
    MultiByteToWideChar(CP_UTF8, 0, buff, 500, wbuff, 500); //из буфера char в буфер wchar_t .
    wcout.imbue(locale("rus_rus.866")); //включаем другую кодировку.
    //setlocale(0, "rus_rus.866"); // или так.
    wcout << wbuff << endl; // выводим содержимое буфера wchar_t
    
    setlocale(0, ".1251"); // вернули кодировку.
    
    system("pause");
    return 0;
}
niks255
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 29
21.05.2013, 17:36  [ТС]     Собранное приложение завершается с ошибкой #10
Всем спасибо, тему можно закрывать
niks255
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 29
24.05.2013, 14:09  [ТС]     Собранное приложение завершается с ошибкой #11
Цитата Сообщение от alsav22 Посмотреть сообщение
Вот, есть такой код. Разбирайтесь:
Что то не могу с этим кодом прошарить. Помогите знающие, хоть пендалем в нужное направление подтолкните.

Добавлено через 20 часов 41 минуту
Народ ну подскажите пожалуйста с тем кодом. Я его в отдельном проекте собрал и он не выводит на экран содержимое буфера. Написано только "Для продолжения нажмите любую клавишу".
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.05.2013, 16:34     Собранное приложение завершается с ошибкой #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <fstream>
#include <Windows.h>
using namespace std;
 
int main()
{
    setlocale(0, ".1251"); //включили кодировку.
    
    char buff_utf8[500];
    char buff_ansi[500];
    wchar_t wbuff[500];
 
    ifstream futf_8("UTF_8.txt");
    ifstream fansi("ANSI.txt");
 
    fansi.getline(buff_ansi, 500);
    cout << "buff_ansi: " << buff_ansi << endl;
    
    futf_8.getline(buff_utf8, 500); // в буффер char из файла UTF-8.
    cout << "buff: " << buff_utf8 << endl;
    
    MultiByteToWideChar(CP_UTF8, 0, buff_utf8, 500, wbuff, 500); //из буфера char в буфер wchar_t .
    setlocale(0, "rus_rus.866"); // //включаем другую кодировку 
    wcout << "wbuff: " << wbuff << endl; // выводим содержимое буфера wchar_t
    cout << "buff_ansi: " << buff_ansi << endl;
    
    setlocale(0, ".1251"); // вернули кодировку.
    cout << endl;
    wcout << "wbuff: " << wbuff << endl; // выводим содержимое буфера wchar_t
    cout << "buff_ansi: " << buff_ansi << endl;
    
    system("pause");
    return 0;
}
Миниатюры
Собранное приложение завершается с ошибкой  
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.05.2013, 16:36     Собранное приложение завершается с ошибкой #13
И так у меня работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <fstream>
#include <Windows.h>
using namespace std;
 
int main()
{
    setlocale(0, ".1251"); //включили кодировку.
    
    char buff_utf8[500];
    char buff_ansi[500];
    wchar_t wbuff[500];
 
    ifstream futf_8("UTF_8.txt");
    ifstream fansi("ANSI.txt");
 
    fansi.getline(buff_ansi, 500);
    cout << "buff_ansi: " << buff_ansi << endl;
    
    futf_8.getline(buff_utf8, 500); // в буффер char из файла UTF-8.
    cout << "buff: " << buff_utf8 << endl;
    
    MultiByteToWideChar(CP_UTF8, 0, buff_utf8, 500, wbuff, 500); //из буфера char в буфер wchar_t .
    //setlocale(0, "rus_rus.866"); // //включаем другую кодировку 
    wcout << "wbuff: " << wbuff << endl; // выводим содержимое буфера wchar_t
    cout << "buff_ansi: " << buff_ansi << endl;
    
    system("pause");
    return 0;
}
Миниатюры
Собранное приложение завершается с ошибкой  
niks255
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 29
24.05.2013, 16:38  [ТС]     Собранное приложение завершается с ошибкой #14
alsav22,
Что то я на вашем скриншоте работы не вижу, она у вас крокозябры выводит
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.05.2013, 17:44     Собранное приложение завершается с ошибкой #15
Цитата Сообщение от niks255 Посмотреть сообщение
alsav22,
Что то я на вашем скриншоте работы не вижу, она у вас крокозябры выводит
С кодом разберитесь, потом пишите. Кракозябры специально для вас сделаны, чтобы было видно, что выводится из файла до обработки, а что после.
niks255
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 29
24.05.2013, 17:53  [ТС]     Собранное приложение завершается с ошибкой #16
Цитата Сообщение от alsav22 Посмотреть сообщение
С кодом разберитесь, потом пишите. Кракозябры специально для вас сделаны, чтобы было видно, что выводится из файла до обработки, а что после.
ОК, беру ваш код, вставляю в проект, компилирую, создаю блокнотом файл с именем "UTF_8.txt" и кладу в папку со скомпилированным exe'шником. Запускаю его и вижу:
Миниатюры
Собранное приложение завершается с ошибкой  
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.05.2013, 18:18     Собранное приложение завершается с ошибкой #17
Попробуйте с этим файлом.
Вложения
Тип файла: txt UTF_8.txt (27 байт, 4 просмотров)
niks255
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 29
24.05.2013, 18:19  [ТС]     Собранное приложение завершается с ошибкой #18
alsav22, А с вашим нормально. Что я делаю не так?
Вот мой файл
Вложения
Тип файла: txt UTF_8.txt (103 байт, 2 просмотров)
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.05.2013, 18:28     Собранное приложение завершается с ошибкой #19
Мой файл не блокнотом делался. Есть у вас ещё какие-нибудь программы, где можно текстовый файл в UTF-8 сделать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2013, 18:30     Собранное приложение завершается с ошибкой
Еще ссылки по теме:

C++ Цикл не завершается при 2х условиях
Программа не завершается корректно C++
C++ Программа сразу завершается
C++ Программа аварийно завершается с ошибкой "map/set iterators are incompatible"
Не прогружаются каскады haarcascade_frontalface_alt.xml в Visual Studio 2010. OpenCV. Завершается с ошибкой 1 C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
niks255
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 29
24.05.2013, 18:30  [ТС]     Собранное приложение завершается с ошибкой #20
Цитата Сообщение от alsav22 Посмотреть сообщение
Мой файл не блокнотом делался. Есть у вас ещё какие-нибудь программы, где можно текстовый файл в UTF-8 сделать?
Найду, только почему он блокнотовские не жует?
Yandex
Объявления
24.05.2013, 18:30     Собранное приложение завершается с ошибкой
Ответ Создать тему
Опции темы

Текущее время: 07:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru