2013-11-26 17 views
-1

Я студент программирования C++ я пытаюсь создать возрастную Calculater в C++, но я застрял в в умножении переменной с другой переменной Вот код:Мой код С ++ не работает

#include <iostream.h> 
#include <conio.h> 
void main() 
{ 
    clrscr(); 
    int birthmonth,birthyear,birthdate; 
    int currentmonth,currentyear,currentdate; 
    int year,month,weeks,cal,calx,days,hours; 
    cout<<"Hassan's Age Calculator\n\n"; 
    cout<<"Enter Your Birth Year(i.e:1996):"; 
     cin>>birthyear; 
    cout<<"\nEnter Your Birth Month(i.e:10):"; 
     cin>>birthmonth; 
    cout<<"\nEnter date of Birth(i.e:27):"; 
     cin>>birthdate; 
    cout<<"\nEnter The Current Month(i.e:7):"; 
     cin>>currentmonth; 
    cout<<"\nEnter The Current Year(i.e:2013):"; 
     cin>>currentyear; 
    cout<<"\nEnter Current Date(i.e:24):"; 
     cin>>currentdate; 
    year=currentyear-birthyear; 
    month=year*12; 
    weeks=month*4.34; 
    cal=(year*365.242)+currentdate; 
    calx=cal+30.43; 
    days=calx-birthdate; 
    hours=days*24; 

    cout<<"\n\n\t\tYour Age is "<<year<< " in Years" ; 
    cout<<"\n\n\t\tYour Age is "<<month<< " in Months" ; 
    cout<<"\n\n\t\tYour Age is "<<weeks<<" in weeks";   
    cout<<"\n\n\t\tYour Age is "<<days<<" in days"; 
    cout<<"\n\n\t\tYour Age is "<<hours<<" in hours"; 
    getch(); 
} 

посмотреть, как имя переменной не работает, оно отображается 18640, но должно быть 149712, умножая ответ переменной (дни) на 24, а ответ дней - 6238 на экране консоли. Я использую turbo C 4.0 ++, и мне нужна помощь в том, что я делаю неправильно.

+11

«Что я делаю неправильно» - с одной стороны, вы используете многолетний компилятор, который принимает неверный код типа 'void main()'. –

+2

[Wow, November 1993] (http://en.wikipedia.org/wiki/Turbo_C++#Historical_versions). * Буквально * 2 десятилетия! Как вы это довели? – BoBTFish

+5

Оставьте этот класс и подайте жалобу против своего профессора, если он тот, кто сказал вам использовать Turbo C++. Кроме того, вы используете арифметику с плавающей запятой для целых чисел. Вы должны использовать 'float' или' double' вместо 'int'. – ApplePie

ответ

13

Похоже, что ваш доисторический компилятор имеет 16-разрядные типы int. 149712 слишком велика, чтобы соответствовать 16 битам, поэтому вычисление переполняется и дает неправильное значение. Вы должны:

  • использование long или int32_t, если вам нужен тип, который гарантированно будет достаточно большим, чтобы представлять числа до нескольких миллиардов; или, возможно, float или double, так как вы выполняете арифметику с плавающей запятой;
  • использовать современный компилятор. В течение всей жизни этого компилятора было два основных обновления языковой и стандартной библиотеки, а язык, который вы пишете, едва ли можно распознать как C++.
+0

Обратите внимание, что OP использует арифметику с плавающей запятой. long и int32_t потеряли бы точность (при условии правильности его формулы). – ApplePie

+0

И OP: обратите внимание, что есть много * бесплатных * компиляторов, которые очень современны и хорошего качества. Microsoft Visual Studio 2012 Express полностью бесплатна для образовательных целей, а также включает в себя всю IDE. – ApplePie

+0

@ AlexandreP.Levasseur Ответ Майка звучит более звучно. Арифметика FP с автоматически заданными результатами может быть дополнительным недостатком в коде OPs. –

Смежные вопросы