2013-11-25 2 views
0

У меня проблема с моим кодом здесь. Предполагается, что программа рассчитана на секунды/год. Мне удалось исправить прыжок, но не смог исправить нормальный год. Надеюсь, кто-то может это исправить. (Это функция, которая называется к основному)Код - help leapyear

Примечание

  • ч = часы
  • D = день
  • вы, = год
  • м = месяц
  • с = секунды
  • t = всего секунд
  • t2 = leapyear

#include <iostream> 
using namespace std; 

void max_s()        
{ 
    unsigned long long s=1; 

int h=s*60; 

    int d=h*24; 
    int m=30; 
    int ye=12; 
    long long t=s*h*d*m*ye; 
    long long t2=t+86400; 
    bool y,n; 
    y=true; 
    n=false; 
    cout<<"leapyear? 'y' for yes 'n' for no "<<endl; 
    cin>>y||n; 
    if(y=true) 
    { 
     cout<<"leapyear:"<<t2<<endl; 
    } 
    else 
    { 
     n=false; 
     cout<<t; 
     cout<<"seconds/year "<<endl; 
    } 
} 
+2

Что вы ожидаете от 'cin >> y || n;' делать? –

+0

пользователь должен иметь тип ethier в y (yes) или n (no) для leapyear – user3014005

ответ

2

if(y=true) Это всегдаtrue, так как он будет оцениваться в присвоенное значение.

Должно быть:

if(y)

На самом деле это очень хорошая причина, чтобы понять, почему мы не пишем == true при сравнении boolean с. Вы можете легко пропустить один из =, вызывая назначение вместо сравнения.

Кроме того, что же такое cin>>y||n;?

Совет, который спасает жизни: как упоминалось в @FredLarson, включите предупреждения (-Wall), и вы получите предупреждение об этом.

+1

Добавление флага компиляции '-Wall' (или эквивалент для компиляторов, отличных от g ++) также должно предупреждать о случайном назначении. –