c++ - 从用户输入中获取 mm dd yyyy

标签 c++ string

这是我必须制作的一个非常简单的程序,但我对如何制作一无所知。

基本上,用户在 mm/dd/yyyy 中输入日期,我所要做的就是将值分开并在不同的行上输出它们。

这是我目前所拥有的:

int main ()
{
    char cMonth[2];
    char cDay [2];
    char cYear[4];

    cout << "Enter a date in the form mm/dd/yyy: " ;

    cin.get(cMonth,3,'/');
    cin.ignore(2,'/');
    cin.get(cDay, 4, '/');
    cin.ignore(2,'/');
    cin.get(cYear, 5);

    cout << cMonth << endl << cDay << endl << cYear << endl;
    return 0;
}

我的程序可以编译,但在运行时会给出错误的输出,例如,如果我输入 04/13/2013,输出将是:

0413
13
2013

最佳答案

问题是您的 char 缓冲区不够大,无法容纳空终止符,因此您将空终止符写到缓冲区末尾之后。在 cMonthcDay 的情况下,这显然会导致它们相互碰撞,因为它们相邻地存储在堆栈中(不要依赖这种行为!)

您需要使它们至少长一个字节,即 3、3 和 5 个字节长。请注意,您的代码容易受到缓冲区溢出的影响;您可能需要调整您的 .get 参数,使它们不会溢出缓冲区,或使缓冲区变长。

关于c++ - 从用户输入中获取 mm dd yyyy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18031114/

相关文章:

c++ - 在派生类中使用模板基类模板构造函数

c++ - 确定动态内存分配中 char 指针的最大容量

c++ - 神秘的 For 循环错误

c++ - QVBoxLayout 什么时候重新计算布局?

java - 计算句子中的单词数

javascript替换索引处的字符问题

java - 无法将字符串转换为 JsonArray

C++如何在复制时保留字符串容量

java - 如何检查字符串是否包含Java中的日期?

c++ - 检查整个数组是否为空