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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка изменения int на float, borland C++ 3.1 в WinXP 
:(
    Опции темы
klassik
Дата 5.7.2008, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Программирую в borland C++ 3.1. В Windows XP.
Написал простую программу. Всё работает:
Код

#include <iostream.h>
#include <conio.h>
int main(void)
{
  clrscr();
  int a[2];
  int i;
for (i=0;i<3;i++) a[i]=i;
cout << "111111111" << "2222222" << "333333333" << endl;
return 0;
}

Но если вместо 
int a[2];
поставить
float a[2];
То программа вылетает. И даже exe файл не создаётся.
PM   Вверх
bobik02
Дата 5.7.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Правильно делает!   smile 

Проверил на : Dev-C++ 4.9.9.2 , C++ BuilderX 1.0.0.1776,
Если присваивать элементу массива типа float значение типа int, компилятор не ругается(что удивительно!) и даже нет предупреждения...

По идеи вам поможет явное преобразования:
Код

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{

  float array[2];
  for ( int i = 0; i < 3; i++ ) {
      array[i] =  static_cast<float>(i);
      cout << array[i] << endl;
  }


   getch();
   return 0;
}



--------------------
Have a nice day
PM   Вверх
Maka6er
Дата 5.7.2008, 17:41 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Что то мне кажется что компилятор стоило бы сменить - староват.
PM MAIL   Вверх
bsa
Дата 5.7.2008, 18:28 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



вообще-то преобразование целых типов к вещественным не сопровождается ни ошибками, ни предупреждениями
PM   Вверх
bobik02
Дата 5.7.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(bsa @  5.7.2008,  18:28 Найти цитируемый пост)
вообще-то преобразование целых типов к вещественным не сопровождается ни ошибками, ни предупреждениями

По логике вещей так и есть. smile 

На счёт ошибок, и предупреждений - это я погорячился  smile (курю много, мозг тупит smile )  


--------------------
Have a nice day
PM   Вверх
klassik
Дата 5.7.2008, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Maka6er @ 5.7.2008,  17:41)
Что то мне кажется что компилятор стоило бы сменить - староват.

Я изучаю С++ по книге "Как программировать на С++" , Дейтел Х., Дейтел П. Мне сказали, что примеры там для Borland C++ 3.1.
Может это не так.
Хотя даже если это и так, то может вы мне посоветуете что-нибудь другое. Что-нибудь более близкое. Так чтобы примеры не пришлось переделывать. По крайней мере не очень сильно.
PM   Вверх
Ln78
Дата 5.7.2008, 21:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



klassik, дело совсем не в int и float. Ошибка в другом: массив из 2 элементов, а ты заполняешь 3. В этот раз тебе повезло с float, что ошибку сразу обнаружил и не повезло с int, в другой раз может быть с точностью до наоборот.
Цитата(klassik @  5.7.2008,  13:43 Найти цитируемый пост)
И даже exe файл не создаётся. 

А это ты, наверное, погорячился? Если нет - какие ошибки выдаёт при компиляции?

Это сообщение отредактировал(а) Ln78 - 5.7.2008, 21:03
PM MAIL   Вверх
klassik
Дата 5.7.2008, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Точно.  smile 
Я то подумал что в a[2] двойка означает последний индекс массива. А это количество. Т.е. ноль и один.
Спасибо.

Добавлено @ 21:12
Цитата(Ln78 @ 5.7.2008,  21:01)

А это ты, наверное, погорячился? Если нет - какие ошибки выдаёт при компиляции?


Окно windows:
Borland C++ for DOS
Процессор NTVDM обнаружил недопустимую инструкцию.
Cs:88eb IP:704c OP:0f 02 17 282a

Это сообщение отредактировал(а) klassik - 5.7.2008, 21:24
PM   Вверх
bsa
Дата 5.7.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(klassik @ 5.7.2008,  21:06)
Borland C++ for DOS
Процессор NTVDM обнаружил недопустимую инструкцию.
Cs:88eb IP:704c OP:0f 02 17 282a

Это не ошибка компиляции. Это ошибка исполнения. Возможно, твоей программы, возможно BC 3.1.
PM   Вверх
klassik
Дата 5.7.2008, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ошибся. Создаётся но в другом каталоге.

В другой версии программы с такой же ошибкой вылетало вот что:

Floating point error: Domain.
Abnormal program termination
Null pointer assignment

Это уже в окне DOS.

Это сообщение отредактировал(а) klassik - 5.7.2008, 21:26
PM   Вверх
Maka6er
Дата 6.7.2008, 01:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(klassik @  5.7.2008,  20:54 Найти цитируемый пост)
Хотя даже если это и так, то может вы мне посоветуете что-нибудь другое.
 
Попробуйте IDE: Microsoft Visual Studio или DevCPP. Можно конечно отдельно взять компилятор но для начала удобнее будет все же IDE.
Цитата(klassik @  5.7.2008,  20:54 Найти цитируемый пост)
Так чтобы примеры не пришлось переделывать. По крайней мере не очень сильно. 

В стандарте C++ принято писать не #include <iostream.h> а #include <iostream> и return 0; в конце main не обязательно так что возможно придется слегка примеры переделать но скорее всего все будет работать и так.
PM MAIL   Вверх
dizzy1984
Дата 7.7.2008, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(klassik @  5.7.2008,  14:43 Найти цитируемый пост)
int a[2];    
  int i;    
for (i=0;i<3;i++) a[i]=i;

На последней итерации значение индекса будет равно "2", что больше максимально возможного ("1"), преобразования тут не при чем.


Опс... поторопился, об этом уже писал Ln78

Это сообщение отредактировал(а) dizzy1984 - 7.7.2008, 13:06
PM MAIL   Вверх
NebelDT
Дата 30.9.2008, 09:32 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: -6
Всего: -10



Код

int a[2];    
  int i;    
for (i=0;i<3;i++) a[i]=i;
 smile 
ДА походу просто цикл неправильный)
PM MAIL WWW YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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