Em gõ đoạn code này vào Visual Studio 2015: http://codepad.org/13csgQoP
Thì báo lỗi liền!
Trong khi đó, em paste vào CodeBlocks, rùi thay gets_s() bằng gets() , thế là CodeBlocks chạy ngon lun.
Vậy là ra sao vậy anh em?
Em gõ đoạn code này vào Visual Studio 2015: http://codepad.org/13csgQoP
Thì báo lỗi liền!
Trong khi đó, em paste vào CodeBlocks, rùi thay gets_s() bằng gets() , thế là CodeBlocks chạy ngon lun.
Vậy là ra sao vậy anh em?
Với con trỏ thì
gets_s() đòi hỏi tới 2 tham số. Nên chắc lỗi do vậy đó
https://msdn.microsoft.com/en-us/library/5b5x9wc7.aspx
Bạn thử thay n = 59 xem :?
Lỗi đầu tiên thì bạn thử tạo mới project rồi thực hiện lại xem.
Lỗi thứ 2 là do bạn khi báo char ten[60]
mà ở hàm nhập tên gọi từ hàm main bạn chỉ truyền cho nó 2 ô nhớ để lưu mà trong 2 ô đó có 1 ô dùng để kết thúc chuỗi, kí tự: "\0"
tên nên chắc chắn sẽ lỗi nếu nhập quá 1 kí tự vì can thiệp vao vùng nhớ không được cho phép, giải quyết: thay giá trị tham số n truyền vào của hàm nhập tên trong hàm main để đủ chứa tên + ký tự "\0"
nhapTen(ten, <đủ ký tự để chứa tên>);
Giải pháp này vẫn chưa ổn lắm nhỉ? fflush(stdin) có hoạt động với VS đâu nhỉ?
Cũng có thể thay fflush(stdin)
thành cin.gnore(1)
.
có ạ
chữ số 1 trong cin.ignore(1) rốt cục có nghĩa là sao ạ?
Không có đâu , có cho có lệ thôi. Nó không xóa bộ nhớ đệm được.
Có nghĩa là xóa 1 cái gì đó trong trường vào stdin
xóa toàn bộ chuỗi nhập vào, hay chỉ 1 ký tự em? ^^
cin.ignore(n): cái này là để đọc và loại bỏ n kí tự còn trong trường vào stdin
https://www.quora.com/What-is-cin-ignore-and-what-is-the-use-of-it
Prototype: cin.ignore(<số ký tự bỏ qua>, <kí tự bỏ qua>)
nhưng vẫn có thể dùng cin.ignore()
, cin.ignore(n)
cơ mà số n ở đây nếu là số ký tự được bỏ qua thì sao mình test n=1 mà enter cả chục lần vẫn cho nhập string ok nhỉ, dùng mà vẫn chưa hiểu rõ lắm. , bác nào giải thích giùm em với.