Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите. Warning при компиляции, виснет программа 
:(
    Опции темы
Zinnyr
  Дата 7.11.2011, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Visual C++ 6 версии
 Мне нужно создать программу для быстрого последовательного поиска.
 Суть метода:
 Cоздаётся фиктивная запись в конце файла (A [ N+1] ) равная искомому элементу. Последовательно перебираются все элементы массива, если на каком-то шаге цикла обнаруживается, что искомый элемент найден, то происходит выход из цикла, и переход к условию i < N+1. Если условие выполняется , то искомый элемент присутствует в массиве, иначе элемента нет.

Файлы самой программы
http://narod.ru/disk/30758019001/search.rar.html

Header (searchDlg.h) программы
Код
protected:
        HICON m_hIcon;
    int *pInt; //Динамический массив
        int IntNum; // Счетчик в операторах циклов для обработки масства


В программе 3 кнопки 

 1) Кнопка Сгенерировать массив (ошибка в D:\УГАТУ\2 курс\МП и ПА\курсач\Создание\search\searchDlg.cpp(221) : warning C4018: '<' : signed/unsigned mismatch , 21 строка)

Код
//получаем введенное пользователем имя файла в переменную m_FileName
UpdateData(1);
//если пользователь не ввел имя файла, 
//то присваиваем переменной m_FileName значение по умолчанию
if (m_FileName.IsEmpty()) m_FileName = "Поиск";
 
CStdioFile m_File; //создаем объект класса CStdioFile
 
// если возникла ошибка открытия файла, то об этом будет сообщено 
// пользователю и завершено выполнение функции
if      ( !m_File.Open(m_FileName+CString(".txt"),
        CFile::modeCreate | CFile::modeWrite | CFile::typeText) )  
{MessageBox("(!) Ошибка открытия файла", "Информация", MB_ICONEXCLAMATION);
  return;
}
 
CString str;
// в цикле генерируем m_NUM псевдослучайных чисел, максимальное 
// значение генерируемого числа также равно m_NUM
for (int n=0; n < m_NUM; n++)
{ // генерируем псевдослучайное число, конвертируем его в строку, 
// помещаем в переменную str
str.Format("%i\n", m_NUM * rand());
m_File.WriteString(str); // записываем переменную str в файл
}
 
// удаляем и обнуляем результаты предыдущих чтений из файла и 
// сортировок
m_DATABOX.ResetContent();
// очищаем поле вывода времени поиска
m_SEARCHTIME.Empty();
 
// выводим в элементы диалога приложения значения по умолчанию, 
// содержащиеся в связанных с ними переменных
UpdateData(0);
 
//закрываем файл, сообщаем об успешной генерации последовательности чисел
m_File.Close();
MessageBox("Файл сгенерирован успешно.", "Информация", MB_ICONINFORMATION);


2) и еще ошибка на кнопке поиск (при ее нажатии программа зависает) 
 D:\УГАТУ\2 курс\МП и ПА\курсач\Создание\search\searchDlg.cpp(313) : warning C4018: '!=' : signed/unsigned mismatch , 12 строка
 D:\УГАТУ\2 курс\МП и ПА\курсач\Создание\search\searchDlg.cpp(315) : warning C4018: '<' : signed/unsigned mismatch 17 строка

Код
 
        if ((pInt == NULL)||(IntNum<1))
        {MessageBox("Искать нечего","Информация", MB_ICONINFORMATION);
        return;
        };
 
 
 int i=1;
// Фиктивную запись массива приравниваем к искомому элементу
 pInt[m_NUM+1]=m_search; 
//Ищем искомую запись
while (pInt[i] != m_search);
 i++;
/* Когда нашли запись (а найдем мы ее во всяком случае, так как прировняли к фиктивной записи 
m_NUM+1 смотрим условие, если искомый элемент найден в нашем массиве, то УСПЕШНО, если же 
найден в фиктивной записи то НЕ УСПЕШНО) */
 if (m_NUM < IntNum+1) MessageBox("(!) Файл найден", "Информация", MB_ICONEXCLAMATION);
 MessageBox("(!) Файл не найден", "Информация", MB_ICONEXCLAMATION);


PM MAIL   Вверх
Earnest
Дата 7.11.2011, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Так тебе чего - ворнинг устранить или ошибку в программе? Ворнинг редко бывает причиной ошибки, просто нынче стандарт ужестчился...
signed\unsigned mismatch - это когда signed int сравнивается с unsigned. Теоретически, это может привести в ошибке, например, если int отрицательный, то он, будучи приведен к unsigned, даст большое положительное число ну и т.д. Либо используй одинаковые типы, либо, если уверен в своей правоте смело ставь приведение к int. Ворнинги и пропадут.
Что касается ошибок, то бери отладчик в зубы и вперед.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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