Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++编写一个程序,提示用户以数字形式输入某人的出生日期(抛/接)

C++编写一个程序,提示用户以数字形式输入某人的出生日期(抛/接)
EN

Stack Overflow用户
提问于 2019-02-22 01:08:57
回答 2查看 9.8K关注 0票数 0

我已经写了一段代码,这有点棘手。我正在尝试将其设置为用户写入其出生日期的位置(例如: 12/05/1990),并将其输出为(“12.5,1990)。我已经为无效的月份和无效的天数编写了else/I。由于某种原因,我无法显示日期和年份。例如,它只正确地显示月份,即“12月”,我得到了一堆日期和年份的数字,这是完全错误的。此外,任何想法,我应该做的计划,能够处理闰年,每4年。任何帮助都是非常感谢的。谢谢!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <string>

using namespace std;

struct invalidDay : public exception 
{
const char * what() const throw () 
{
    return "Invalid date, try again.";
}
};

struct invalidMonth : public exception 
{
const char * what() const throw () 
{
    return "Invalid month, try again.";
}
};

int main()
{
int day;
int month;
int year;
string monthName;

try 
{
    cout << "Enter birthday: mm/dd/yyyy : ";
    cin >>month>>day>>year;

    if (day > 31)
        throw invalidDay();

    if (month == 1) {
        monthName = "January";
        if (day > 31)
            throw invalidDay();
    }
    else if (month == 2) {
        monthName = "February";
        if (day > 28)
            throw invalidDay();
    }
    else if (month == 3) {
        monthName = "March";
        if (day > 31)
            throw invalidDay();
    }
    else if (month == 4) {
        monthName = "April";
        if (day > 30)
            throw invalidDay();
    }
    else if (month == 5) {
        monthName = "May";
        if (day > 31)
            throw invalidDay();
    }
    else if (month == 6) {
        monthName = "June";
        if (day > 30)
            throw invalidDay();
    }
    else if (month == 7) {
        monthName = "July";
        if (day > 31)
            throw invalidDay();
    }
    else if (month == 8) {
        monthName = "August";
        if (day > 31)
            throw invalidDay();
    }
    else if (month == 9) {
        monthName = "September";
        if (day > 30)
            throw invalidDay();
    }
    else if (month == 10) {
        monthName = "October";
        if (day > 31)
            throw invalidDay();
    }
    else if (month == 11) {
        monthName = "Noveber";
        if (day > 30)
            throw invalidDay();
    }
    else if (month == 12) {
        monthName = "December";
        if (day > 31)
            throw invalidDay();
    }
    else if (month > 12)
        throw invalidMonth();

    cout << monthName << " " << day << "," << year << "." << endl;


}

catch (invalidDay& e)
{
    cout << e.what() << endl;
}
catch (invalidMonth& e)
{
    cout << e.what() << endl;
}

system("pause");
return 0;



}
EN

回答 2

Stack Overflow用户

发布于 2019-02-22 01:23:50

本例中的>>运算符仅在遇到空格时才停止正常读取。当您尝试读取月份时,操作符将命中/字符并在流中引发错误标志,因为该字符既不是整数的一部分,也不是空格的一部分。在引发错误标志后,随后的两个读取操作将不执行任何操作,使dayyear未初始化。

使用std::getline()分隔输入字符串的各个部分,并使用std::stoi()对其进行解析。

通过在if语句中添加检查来检查年份是否为闰年,并在检查日期是否有效时对这种情况使用单独的条件,可以轻松地处理闰年。

票数 0
EN

Stack Overflow用户

发布于 2019-02-22 01:59:05

如前所述,您可以使用std::getline。之后,您可以使用std::substr拆分日期并将它们解析为一个整数。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
string temp;

cout << "Enter birthday: mm/dd/yyyy : ";
getline(cin, temp);

month = stoi(temp.substr(0, 2));
day = stoi(temp.substr(3,5));
year = stoi(temp.substr(6,10));

输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Enter birthday: mm/dd/yyyy : 05/24/2000

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
May 24,2000.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54818597

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文