Vấn đề
Trình biên dịch không đọc chuỗi sau số nguyên trong C? Làm sao khắc phục?
Giải pháp
Khi bạn nhập số nguyên và nhấn Enter để đọc giá trị tiếp, trình biên dịch lưu ký tự null vào ký tự đầu tiên của chuỗi và kết thúc nhập chuỗi. Vì scanf dừng khi gặp ký tự null.
Cách giải quyết?
Khi đọc chuỗi hoặc ký tự sau int/float, ta nên đọc một ký tự tạm thời có trong bộ đệm nhập.
Chương trình không lỗi sau:
Ví dụ
#include <stdio.h>
struct student {
char name[10];
int roll;
char temp;
} s;
int main() {
printf("Nhap thong tin sinh vien:\n");
printf("\nNhap ma so: ");
scanf("%d", &s.roll);
scanf("%c", &s.temp); // đọc ký tự tạm
printf("\nNhap ten: ");
gets(s.name);
printf("\nHien thi thong tin sinh vien:\n");
printf("\nMa so: %d\t", s.roll);
printf("\nTen: %s\t", s.name);
return 0;
}
Kết quả
Nhap thong tin sinh vien: Nhap ma so: 3 Nhap ten: tutorialspoint Hien thi thong tin sinh vien: Ma so: 29806 Ten: tutorialspoint