01/10/2018, 11:11
Lỗi trôi lệnh trong C
int EnterNumber(){
int number;
printf("Enter your's number:");
if(!scanf("%d", &number)){
puts("Keypress don't number!");
int choose = 0;
puts("Work:
1. Continue 2. Break
Your's number will choose:");
while(!scanf("%d", &choose)){
switch(choose){
case 1:
EnterNumber();
break;
case 2:
break;
default:
puts("Keyboard don't recognize");
break;
}
}
}
return number;
}
đây là code của em! ý tưởng: khi nhập number là 1 kí tự khác số thì chuyển vào vòng lặp yêu cầu người dùng chọn cách sử lý! nhưng nó trôi không cho nhập biến choose!
Bài liên quan
Ngay trước khi vào vòng while nhớ xoá bộ nhớ đệm.
Khi bạn sử dụng scanf để nhận input nhưng lại nhập chữ hay gì đó ngoài số trong khi bạn yêu cầu input đợi một số thì nó bị ngu người, điều này khiến cho việc cái input tiếp tục làm việc là không được. Bạn phải tát cho nó tỉnh bằng nhiều cách khác nhau. Xóa bộ đệm như bạn @noz1995 đã gợi ý thử xem.
mình dùng fflush(stdin) rồi mà nó vẫn fail chạy tiếp luôn không cho mình nhập!
Thử cái ni
cái này là kiểm tra không nhập gì mà bạn!
Cái này là clear buffer đấy bạn
ok bạn! đề mình làm thử!
Nó vẫn trôi tiếp bạn!
Thử với
ok bạn mình làm được rồi! thêm 1 vòng lặp ở ngoài nữa là ok while(’\n’ != getchar()){ code error when enter number}
Hơi trễ nhưng mình muốn bổ sung thêm (mới tìm được ở stackoverflow và dịch ra luôn).
Trong trường hợp mình đang muốn nhập số và dùng
scanf
, sau khi nhập 1 chuỗi vào (ví dụ"hello"
) và ký tự đầu tiên gặp được ('h'
) không phải số thìscanf
gặp lỗi và để hết dữ liệu lại trong input nên trong lần gọiscanf
sau nó lại tiếp tục gặp cái đống dữ liệu trước ("hello"
) rồi tiếp tục fail,… Đó là lý do vì sao cần phải clear-buffer.Nhưng có cách giải quyết khác là bạn đọc 1 dòng (
fgets
) và dùngint sscanf( const char *buffer, const char *format, ... );
để phân tích dòng đó :v trả về 1: thành công, 0: thất bại.em làm đc rồi anh! Cảm ơn anh nhiều! Em cần rèn thêm tiếng anh để search tốt hơn!