问题存储日期 C++

Issue storing date c++

我有一个class,学生。 它包含一个私有成员 'dob' 我想将字符串 dob 设置为正确的日期。 我应该验证输入,并且我尝试为此使用 scanf,但我不确定为什么我的输出关闭。

void Student::getBday(){
    int mm, dd, yyyy;
    printf("Date of Birth?\n");
    scanf("%d/%d/%d", &mm, &dd, &yyyy);
    dob = mm + '/' + dd + '/' + yyyy;
}

这是我的打印函数:

void Student::printStudent(){
    cout.flush();
    cout << endl;
    cout << "Student: " << lastName << ", " << firstName << endl;
    cout << "Student ID: " << ID << endl;
    cout << "Gender: " << gender << endl;
    cout << "Status: " << status << endl;
    cout << "Date of Birth: " << dob << endl;
    cout << "GPA: " << gpa << endl;
    cout << endl;
}

我的输出:

LastName?
Bar
FirstName?
Foo
Gender?
M
Status?
Freshman
Date of Birth?
12/21/2012
GPA?
3.5
ID?
12345678
12345678

Student: Bar, Foo
Student ID: 12345678
Gender: M
Status: Freshman
Date of Birth: [
GPA: 3.5

Press any key to continue . . .

编辑:

终于成功了。谢谢大家的帮助。我选择那个答案是因为它帮助我转换,但每个人都帮助我理解了我的串联问题。

导致问题的是您使用 scanf 的方式。

应该更像

...
printf ("Date of Birth?");
scanf("%d/%d/%d", &mm, &dd, &yyyy); 
...

编辑

这是一个 sprinf( ... ) 的例子

...
int mm,dd,yyyy;
char dob [50];
printf ("Date of Birth?");
scanf("%d/%d/%d", &mm, &dd, &yyyy); 
sprintf (dob, "%d/%d/%d", mm, dd, yyyy);
...

尝试 #include <sstream>,然后像这样设置 dobstd::ostringstream oss; oss << mm << '/' << dd << '/' << yyyy; dob = oss.str();。如果你想让它看起来更好,google std::setwstd::setfill 将 day/month 数字填充到 2 位数。

您还应该检查输入错误:

if (scanf("%d/%d/%d", &mm, &dd, &yyyy) != 3)
{
    std::cerr << "twit!  call that a date???\n";
    exit(1);
}

(正如 molbdnilo 评论的那样,您当前的问题是您要从日期的各个部分添加提取数字,然后将这些数字与两个“/”字符的 ASCII 值一起添加:相反,您需要连接这些值的字符串表示,字符串流就是为此而设计的。)