这段代码是关于SSN的,我需要查看其中的错误,因为它是用于大学项目的,我做不到

问题描述

请帮助我解决代码附带的错误。例如,如果您输入1650712999999,则应该显示男性65.07.12,开始时显示1代表男性,开始时显示2代表女性,然后出生日期YY.MM.DD和其他数字无关

#include <iostream>

using namespace std;

int main()
{
    long long int n;
    int s,d,m,y;
    cout << "Enter your SSN" << endl;
    cin>>n;
    s=0;
    y=0;
    m=0;
    d=0;
    if((n <= 2991231999999) && (n >= 1000101000000))
    {

        n=n/1000000 %10;
        s=n/1000000 %10;
        y=(n/100000 %10 *10)+(n/10000 %10);
        m=(n/1000 %10 *10)+ (n/100 %10);
        d=(n/10 %10 *10) + (n %10);
        if
       {

            s=1
            cout<<"male "<<y<<"."<<m<<"."<<d;
         else
            cout<<"female "<<y<<"."<<m<<"."<<d;
       }
    }
    else
    {
        cout << "Invalid SSN" << endl;
    }
    return 0;
}

解决方法

    %10中的
  • n=n/1000000 %10;正在删除必需的数据,因此您应该将其删除。
  • 内部if语句没有条件,因此您必须添加它。
  • 应删除流浪s=1,因为此后缺少分号将导致编译错误。
  • 内部if语句周围缺少一些花括号,因此您必须添加它。
  • 您应使用std::setwstd::setfill而不是65.07.12来获取65.7.12

固定代码:

#include <iostream>
#include <iomanip> // add this to use setw() and setfill()

using namespace std;

int main()
{
    long long int n;
    int s,d,m,y;
    cout << "Enter your SSN" << endl;
    cin>>n;
    s=0;
    y=0;
    m=0;
    d=0;
    if((n <= 2991231999999) && (n >= 1000101000000))
    {

        n=n/1000000; // remove %10
        s=n/1000000 %10;
        y=(n/100000 %10 *10)+(n/10000 %10);
        m=(n/1000 %10 *10)+ (n/100 %10);
        d=(n/10 %10 *10) + (n %10);
        cout << setfill('0'); // add this
        if (s == 1) // add condition
       {
            // remove stray s=1
            cout<<"male "<<setw(2)<<y<<"."<<setw(2)<<m<<"."<<setw(2)<<d; // add setw()
         } // add this
         else
         { // add this
            cout<<"female "<<setw(2)<<y<<"."<<setw(2)<<m<<"."<<setw(2)<<d; // add setw()
       }
    }
    else
    {
        cout << "Invalid SSN" << endl;
    }
    return 0;
}