01/10/2018, 11:05
Không thể nhập tiếp năm sinh và điểm trung bình sau khi nhập tên sinh viên
[Từ chương trình quản lý sv]. Đến đoạn nhập tên sinh viên thì chương trình bỗng dừng lại không cho thực hiện tiếp việc nhập năm sinh và điểm trung bình. cho mình hỏi là sai chỗ nào ở đoạn code này vậy
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
struct sinhvien{
string hoten;
int namsinh;
float diemtb;
}sv[500];
void nhap(){
int m;
string mystr;
cout<<"nhap so hoc sinh can nhap: ";
cin>>m;
cout<< "nhap ttsv: ";
for(int i=0;i<m;i++){
cout<< "
ho ten sinh vien: ";
getline(cin,sv[i].hoten);
cout<< "nam sinh: ";
getline(cin,mystr);
stringstream(mystr)>>sv[i].namsinh;
cout<< "diem trung binh: ";
getline(cin,mystr);
stringstream(mystr)>>sv[i].diemtb;
}
}
int main(){
nhap();
return 0;
}
Bài liên quan
m là cái gì hả bạn???
m là số sv cần nhập
Cái quan trọng là bạn đã khai báo m đâu?
t khai báo rồi nhưng mà viết thiếu thôi
t vừa sửa lại rồi mà
Nếu bạn đọc xâu
sv[i].hoten
có dấu cách, hãy dùng getline. Khi bạn nhập string có dấu cách, C++ sẽ hiểu là các từ các nhau và nhập vào các biến đằng sau. Tỉ dụ nhưMình không nhớ là trong C++ có kiểu này
tớ dùng getline rồi vẫn bị như vậy. có phải cú pháp là: getline(cin,sv[i].hoten) không
Đúng rồi…
Mình không biết bạn biên dịch bằng IDE nào mà nó vẫn pass được (nên thay IDE khác, hoặc config lại)
Bạn chưa khai báo thư viện cho lớp
string
<cstring>
là của C để xử líchar
, không liên quan gì đếnstring
của C++ref: http://www.cplusplus.com/reference/cstring/
C++ là
<string>
struct
của C++ cũng không khai báo thế kia, như @53k41iga nóivậy bạn thử đi xem có được k. t không làm được
vậy khai báo struct kiểu gì bạn
Bạn nên khai báo tách bạch ra. Một cái khai báo kiểu dữ liệu, một cái khai báo mảng sv
Lỗi của bạn là do bạn chưa
#include <string>
Khai báo struct nó không khác gì bạn khai báo các biến thông thường.
Lập trình C++ thì nên viết rõ ràng, đừng gộp hết vào như C, nhìn rất …
t vẫn chưa hiểu bạn ơi
Code sau khi sửa tất cả những thứ râu ria bên cạnh:
Thêm
cin.ignore()
là ngon ngay.Bonus ảnh demo:
ok. cảm ơn bạn. nhưng mình muốn hỏi thêm là sao lại dùng cin.ignore()
Khi bạn nhập m, kiểu gì cũng có 1 kí tự endline ở cuối dòng nhập m. Kiểu như
Do vậy, dấu \n sẽ bị đọc vào sv[i].hoten. Khi in ra sv[i].hoten, kết quả là rỗng.
1 cách dễ nhớ, đọc số xong mà phải đọc string ở dòng dưới thì tốt nhất dùng
cin.ignore()
.Đọc thêm: link
hey joe, i think it’s not as you said. my basic learning about c++ generally is very well
ok bạn.giờ mình hiểu rồi:heart_eyes: