Cậu dùng
cin.ignore(); để xóa bộ đệm rồi
cin.getline(xâu,số ký tự);
ví dụ
Code:char ten[30]; cout<<"Nhap vao ten "; cin.ignore(); cin.getline(ten,30);
Mình làm bài tập về nhà về nhập sinh viên đơn giản
sao không nhập được cả họ và tên
ví dụ : Nguyễn Văn A thì chỉ in ra được là Nguyễn thôi
Mọi người giúp mình cái nhé ,thank
Đây là bài của mình
#include <iostream.h>
#include <conio.h>
class sv
{
public:
char name[40];
int stt;
float dtb;
void inra();
void cinn();
};
void sv::inra()
{
cout << "SV " << name << " STT " << stt << " DTB " << dtb << endl;
}
void sv::cinn()
{
cout << "SV : ";cin >> name; //Nếu dùng gets(name) thì cũng thế
cout << "STT : "; cin >> stt;
cout << "DTB : "; cin >> dtb;
}
int main()
{
int n;
cout << "Nhap so luong SV can them : n = ";cin >> n;
sv a[n];
for(int i=0;i<n;i++)
{
a[i].cinn();
}
int j;
float bandau;
for(int i=1;i<n;i++)
{
bandau=a[i].dtb;
for(j=i;j>0 && a[j-1].dtb>bandau;j--)
{
a[j].dtb=a[j-1].dtb;
}
a[j].dtb=bandau;
}
for(int i=0;i<n;i++)
{
a[i].inra();
}
getch();
}
Cậu dùng
cin.ignore(); để xóa bộ đệm rồi
cin.getline(xâu,số ký tự);
ví dụ
Code:char ten[30]; cout<<"Nhap vao ten "; cin.ignore(); cin.getline(ten,30);
Thank , Có cách khác nữa ko vậy iamvtn
ko dùng cin>>.....; thì dùng gets hay scanf cũng được mà
Tớ chưa có cách nào mới. Oài nicolasman hiểu sai vấn đề rồi, scanf dùng trong C --> phải nói dùng scan và prin trong C khá bất tiện, cout và cin trong C++ dùng hay hơn nhiều, vì trong C++ có cải tiến Hướng đối tượng (Class)
Còn bài này để lưu tên SV có cả dấu cách thì dùng cin.ignore() và cin.getline() , còn ngoài ra thì tớ không biết có cách khác không thì tớ không biết, tớ toàn dùng cách này.
Có thể dùng chuỗi string khi nhập tên
Code:cout <<"Nhap ten: "; string s; getline(cin,s);
Bạn phải dùng fflush(stdin); ở trước cout << "SV " << name << " STT " << stt << " DTB " << dtb << endl.nhớ thêm #include<stdio.h>
Hix , với char name[30];
thì có thể dùng gets(name); // cái này cho nhập kí tự cách trống
Còn khi khai báo trong lớp thì dùng gets(name) sao lại ko được
char ten[30];
cout<<"Nhap vao ten ";
cin.ignore(1);
cin.getline(ten,30);
Thế là được rồi nhé !
Mày mò một hồi cũng đã ra
Có điều là tại sao ko dùng hàm thì đổi được , còn dùng hàm doithutu(sv x,sv y) thì lại ko đổi được nhỉ
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
class sv
{
public:
char name[40];
int masv;
float dtb;
void print();
void nhapsv();
};
void sv::print()
{
// dung setw() de tao su thang hang
cout << "SV : " << setw(5) << name;
cout << setw(30-strlen(name)) << " STT : " << masv;
cout << setw(10) << " DTB : " << dtb << endl;
}
void sv::nhapsv()
{
cout << "Ten SV : ";
cin.ignore(1);
gets(name);
cout << "Ma Sinh Vien : "; cin >> masv;
cout << "Diem trung binh : "; cin >> dtb;
}
void doithutu(sv x,sv y)
{
sv luu;
luu=y;
y=x;
x=luu;
}
int main()
{
int n;
cout << "Nhap so luong SV can them : n = ";cin >> n;
sv a[n];
for(int i=0;i<n;i++)
{
a[i].nhapsv();
}
//doi cho sinh vien theo thu tu diem giam dan
sv luu;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i].dtb<a[j].dtb)
{
doithutu(a[i],a[j]);
}
}
}
//In sinh vien sau khi sap xep
cout << "\n Sau khi sap xep : \n";
for(int i=0;i<n;i++)
{
a[i].print();
}
getch();
}
Mong mọi người giải đáp
Đã được chỉnh sửa lần cuối bởi manutd1988 : 09-05-2007 lúc 11:06 PM.