2013-04-04 2 views
1

FYI Я новичок в C++. Это всего лишь часть полного кода, проблема в том, что «student.id», если вход начинается с «0» eg'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

Спасибо, он решил это. –

1

Если ваши идентификаторы всегда будут иметь определенную длину, вы можете использовать функцию printf C вместо потоков, что дает вам больше мощности;

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

Это всегда будет печатать на 8 цифр ID, и префикс 0s при необходимости (если это было только %8d было бы префиксом с пробелами).

Но, как уже указывалось, вам, скорее всего, лучше хранить его в виде строки, потому что тогда вы сможете увеличить длину идентификаторов в будущем, не прибегая к настройке всех старых идентификаторов.

+0

Большое спасибо, да, вы правы, мне лучше использовать струну из-за более позднего возможного увеличения! –

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; 

Если идентификационные номера не все той же длины, вы должны обнаружить, как долго они используются и используют соответствующую ширину в каждом вызове setw().

Смежные вопросы