2013-04-04 231 views
1

仅供参考我是C++的初学者。这只是完整代码的一部分,问题是'student.id',如果输入以'0'开始(例如'06042010'),则输出不显示零(在这种情况下,将显示'6042010'!问题是,我想,要显示第一个零。谢谢。输出显示不为零

#include<iostream> 
using namespace std; 

struct students 
{ 
    char name[15]; 
    char surname[10]; 
    int id; 

}; 

int main() 
{ 
    students student; 

cout<<"Name: "; 
cin>>student.name; 
cout<<"Surname: "; 
cin>>student.surname; 
cout<<"ID: "; 
cin>>student.id; 

cout<<"\nStudent: "<<student.name<<" "<<student.surname<<" ID "<<student.id<<endl; 

return 0; 

}

回答

5

如果您需要保留前导零,你应该存储id作为一个字符串,而不是一个int

+0

谢谢,它解决了。 – 2013-04-04 19:55:25

1

如果您的ID总是特定的长度,您可以使用C的printf函数而不是流,这会给您更多的权力;

printf("Student: %s %s ID %08d\n", student.name, student.surname, student.id); 

,将永远打印8个位数的ID,并根据需要将0前缀(如果它只是%8d它会用空格前缀)。

但正如已经指出的那样,您最好将其存储为字符串,因为那样您将可以在将来增加ID的长度,而无需调整所有旧ID。

+0

非常感谢,是的,我应该更好地使用字符串,因为以后可能会增加! – 2013-04-04 19:52:13

0

如果需要或希望保留学生证了一些因为某些原因你也可以我们以下几点:

#include <iomanip> 

const int width = 8; //The length of your student ID numbers 

cout << "\nStudent: " << student.name << " " <<student.surname 
    << " ID " << setfill('0') << setw(width) << student.id << setfill(' ') << endl; 

如果你的ID号是不是所有你将不得不检测多久相同的长度他们是在每个setw()调用中使用适当的宽度。