01/10/2018, 09:07

Mất kí tự đầu khi dùng gets trong C

Mọi người cho em hỏi với ạ, em dùng gets như sau:
printf("Input name for student %d: ", temp+1);
while(getchar() == ‘ ’);
gets(sv[temp].name);
Tại sao em cứ bị mất kí tự đầu tiên khi em nhập ạ, ví dụ nhập là hung thì trong địa chỉ của xâu chỉ còn chưa chuỗi ung thôi ạ, em đã tìm hiểu trên mạng nhưng ko có câu trả lời thỏa đáng ạ, em mong mọi người giúp đỡ với ạ.
Đây là source code full của em ạ: http://ideone.com/bVTBhm

Nguyễn Thanh Vũ viết 11:11 ngày 01/10/2018

Chào bạn,

Lý do mất kí tự đầu là do bạn dùng hàm getchar() trong hàm while. Ví dụ khi bạn nhập vào kí tự là “hung” thì hàm getchar() sẽ lấy kí tự ‘h’ ra và so sánh với ‘\n’ , và do không bằng nhau nên break khỏi vong lặp while. Do đó hàm gets() chỉ còn lại “ung” vì ‘h’ đã được lấy ra rồi.

Bạn có thể thay vong lặp while bằng getchar() thôi là được (mục đích của getchar() trong trường hợp này là để lấy ‘\n’ do bạn ấn enter lúc nhập số học sinh vào).

Bài liên quan
0