【问题标题】:any help to make this code smaller c++任何有助于使此代码更小 C++
【发布时间】:2015-05-15 09:33:57
【问题描述】:

让程序输入用户day / month / year 然后valdite

day < 1 的输入日期应更正为day = 1 以及

如果d>30,则日期为day = 30,如果输入,则用户月份应介于 1 和 12 之间以及年份(介于 2000 和 2015 之间)

我需要让我的代码更小,特别是缩短更正的功能

我做了三个功能:一个用于打印输入
第二个用于校正数据
第三个用于 valdite 用户的输入

这是我的代码:

#include<iostream>

using namespace std ;

void print24(int &d , int &m, int &y);
bool valid (int &d , int &m , int & y);
void corrected (int & d , int & m , int & y);

int main()
{
    int day , month , year ;
cout<<"Enter Date between 1/1//2000 to 30/12//2014 in format <D M Y>" << endl ;
cin>>day>>month>>year ; 

cout<<"Date Entered : ";
print24(day ,month , year);
cout<<endl ;

if(valid( day , month , year))
{
    cout<<"You Entered Valid Date :";
    print24(day ,month , year);

}
else
{
    cout<<endl<<"You Entered inValid Date ! "<<endl;
    cout<<"Corrected Date is : ";
corrected (day , month , year);

}


}

void print24(int &d , int &m , int & y)
{

cout<<d<<"/"<<m<<"/"<<y;
}

bool valid (int &d , int &m , int & y)
{
if (d<=30 && d >=1 && m <=12 && m>=1 && y>=2000 && y<=2015)
return true ;
else 
return false ;
}


void corrected (int &d , int &m , int  &y)
{

 if(d<1)
    {


    d=1 ;
    if(m<1)
    {
        m=1;
        if(y<2000)
        {
            y=2000;
            print24(d ,m , y);
        }

        else if(y>2015)
        {
            y=2015 ;
            print24(d ,m , y);
        }
        else
        {
            y=y ;
            print24(d ,m , y);
        }
    }

    else if(m>12)
    {
        m=12 ;
            if(y<2000)
        {
            y=2000;
            print24(d ,m , y);
        }

        else if(y>2015)
        {
            y=2015 ;
            print24(d ,m , y);
        }
            else
        {
            y=y ;
            print24(d ,m , y);
        }

    }

    else
    {
        m=m ;

            if(y<2000)
        {
            y=2000;
            print24(d ,m , y);
        }

        else if(y>2015)
        {
            y=2015 ;
            print24(d ,m , y);
        }
            else
        {
            y=y ;
            print24(d ,m , y);
        }

    }

    }

///////////////////////////////////////////////////////////////////////////////////////     

     else if(d>30)

    {


    d=30 ;
    if(m<1)
    {
        m=1;
        if(y<2000)
        {
            y=2000;
            print24(d ,m , y);
        }

        else if(y>2015)
        {
            y=2015 ;
            print24(d ,m , y);
        }
        else
        {
            y=y ;
            print24(d ,m , y);
        }
    }

    else if(m>12)
    {
        m=12 ;
            if(y<2000)
        {
            y=2000;
            print24(d ,m , y);
        }

        else if(y>2015)
        {
            y=2015 ;
            print24(d ,m , y);
        }
            else
        {
            y=y ;
            print24(d ,m , y);
        }

    }

    else
    {
        m=m ;

            if(y<2000)
        {
            y=2000;
            print24(d ,m , y);
        }

        else if(y>2015)
        {
            y=2015 ;
            print24(d ,m , y);
        }
            else
        {
            y=y ;
            print24(d ,m , y);
        }

    }

    }
/////////////////////////////////////////////////////////////////////////////////// 
    else
    {
        d=d ;


    if(m<1)
    {
        m=1;
        if(y<2000)
        {
            y=2000;
            print24(d ,m , y);
        }

        else if(y>2015)
        {
            y=2015 ;
            print24(d ,m , y);
        }
        else
        {
            y=y ;
            print24(d ,m , y);
        }
    }

    else if(m>12)
    {
        m=12 ;
            if(y<2000)
        {
            y=2000;
            print24(d ,m , y);
        }

        else if(y>2015)
        {
            y=2015 ;
            print24(d ,m , y);
        }
            else
        {
            y=y ;
            print24(d ,m , y);
        }

    }

    else
    {
        m=m ;

            if(y<2000)
        {
            y=2000;
            print24(d ,m , y);
        }

        else if(y>2015)
        {
            y=2015 ;
            print24(d ,m , y);
        }
            else
        {
            y=y ;
            print24(d ,m , y);
        }

    }

    }

    }

这里是问题:

编写一个函数,接受日、月和年的整数值,并以有效格式返回它们。如果日大于 30,则将日转换为 30。如果月大于 12,则将月转换为 12。类似地,如果日或月小于 1,则将其转换为 1。最后确保年份介于 2000 和2015. 如果所有输入都有效,则返回 true,否则返回 false。编写一个程序,提示用户输入日、月和年。然后程序使用上面编写的函数验证它们,如果所有输入都有效,则显示验证。否则,程序将显示无效和函数返回的更正输入值。使用传递引用方法。

【问题讨论】:

标签: c++ c++11 visual-c++ dev-c++


【解决方案1】:

让你corrected 函数如下:

if(d<1 || d>31)     // if d less then 1 OR greater than 31
{
    d = d<1 ? 1:31;  // if d<1, d will become 1 else 31
}
if(m<1 || M>12)      // if m less then 1 OR greater than 12
{
    m = m<1 ? 1:12;   // if m<1, m will become 1 else 12
}
if(y<2000 || y>2015)   // if y less then 2000 OR greater than 2015
{
    y = y<2000 ? 2000:2015;   // if y<2000, y will become 2000 else 2015
}
print24(d ,m , y);

【讨论】:

    【解决方案2】:

    例如这个方法可以简化:

    bool valid (int &d , int &m , int & y)
    {
    if (d<=30 && d >=1 && m <=12 && m>=1 && y>=2000 && y<=2015)
    return true ;
    else 
    return false ;
    }
    

    收件人:

    bool valid (int &d , int &m , int & y)
    {
      return d<=30 && d >=1 && m <=12 && m>=1 && y>=2000 && y<=2015;
    }
    

    第二个例子是这个块:

        m=1;
        if(y<2000)
        {
            y=2000;
            print24(d ,m , y);
        }
    
        else if(y>2015)
        {
            y=2015 ;
            print24(d ,m , y);
        }
        else
        {
            y=y ;
            print24(d ,m , y);
        }
    }
    

    这可以简化如下:

        m=1;
        if(y<2000)
        {
            y=2000;            
        }
        else if(y>2015)
        {
            y=2015;
        }
    
        print24(d, m, y);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-30
      • 1970-01-01
      • 2017-09-28
      • 2022-06-16
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      相关资源
      最近更新 更多