问题存储日期 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>
,然后像这样设置 dob
:std::ostringstream oss; oss << mm << '/' << dd << '/' << yyyy; dob = oss.str();
。如果你想让它看起来更好,google std::setw
和 std::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 值一起添加:相反,您需要连接这些值的字符串表示,字符串流就是为此而设计的。)
我有一个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>
,然后像这样设置 dob
:std::ostringstream oss; oss << mm << '/' << dd << '/' << yyyy; dob = oss.str();
。如果你想让它看起来更好,google std::setw
和 std::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 值一起添加:相反,您需要连接这些值的字符串表示,字符串流就是为此而设计的。)