01/10/2018, 10:14
Hỏi về cách thông báo nhập lỗi khi nhập quá 1 kí tự
Em hiên đang làm 1 bài về nhập kí tự nếu chữ thường sẽ in hoa và chữ hoa sẽ in thường, về bước này thì em đã làm được, em đang dính ở phần điều kiện, nếu em yêu cầu người dùng nhập 1 kí tự thì lỡ người dùng nhập 2 kí tự trở sẽ thông báo nhập sai, nhưng em không biết điêu kiện ây như thê nào. Mong mấy anh chị có kinh nghiệm chỉ dạy em phần này!. Em hy vọng mấy anh chị không nên đưa bài giải, chỉ nên giải thích cho em nó hoạt động như thế nào thôi ạ! Chúc anh chị có ngày tốt đẹp!
Bài liên quan
Bạn cho người dùng nhập vào
char *
rồi đếmví dụ mình ghi:
char * chucai;
printf(“Nhap chu cai );
scanf(”%c", &chucai);
nhu vay hả bạn?
Code này là C++ thì phải…
Đối với char* thì bạn không dùng scanf được, thay vào đó dùng getline()
Mà mình thấy cách tốt nhất để thu được 1 ký tự nhập vào từ bàn phím là dùng getch()
Minh đang học C chưa học C++. Cho mình hỏi lệnh Char* là con trỏ đúng không? Mình chưa học tới con trỏ, chỉ dùng mới học tới if else thôi
Thứ nhất, code của bạn là code C++, không phải code C
Thứ 2, trong lập trình không có khái niệm “lệnh Char*”
Thứ 3, char* là một kiểu dữ liệu, và scanf %c thì chỉ dùng để nhập ký tự, không phải để nhập mảng ký tự
cái này là code C chứ C++ cái gì??
thích đơn giản thì cứ phang
rồi xử lý dòng input nhập vào:
ai nhập nhiều hơn 98 ký tự 1 dòng thì cái
input_line
trên chứa ko nổi, có thể phải cần xóa mấy ký tự còn thừa…rảnh háng thì viết 1 cái struct chứa
char * ptr
vàint length
rồi viết hàm tăng độ dài cho chuỗi tùy ý như C++ string vào…Đây là C mà đâu phải C++
Bạn có thể dùng
char *
như 1 mảng ý, rồi điếm số kí tự của mảng đóCho em hỏi sự khác nhau 3 cái : scanf(), fgets() và gets()? và dòng “stdin” mình dùng để làm gì ạ?
Vậy nếu em chỉ muốn người dùng nhâp duy nhất 1 kí tự thì em sẽ làm:
char input_line[1];
fgets(input_line, 1, stdin);
C thì không có & chứ nhỉ? Hay mình nhầm?
scanf đọc theo format, có thể đọc int, float, char, 1 từ, 1 dòng v.v…, chỉ đọc từ stdin
fgets chỉ đọc 1 dòng, nhưng có thể đọc từ stdin hoặc từ file
gets chỉ đọc 1 dòng và chỉ đọc từ stdin
gets, scanf nếu đọc 1 dòng mà quá nhiều ký tự, quá sức chứa của mảng ký tự truyền vào có thể chứa được thì gây lỗi. fgets cho phép giới hạn số ký tự trên 1 dòng, nên dùng fgets an toàn hơn. Nhược điểm là fgets lại chép luôn ký tự xuống dòng vào output mà ko bỏ qua như gets.
stdin là input nhập vào từ bàn phím hoặc từ pipe, hiểu đơn giản thì cứ cho nó là nhập từ bàn phím đi.
nhập đúng 1 ký tự ko phải khoảng trắng thì xài
char c; scanf("%c", &c);
cho khỏe. fgets kiểu kia phải chừa 1 chỗ cho ký tự NULL sau cùng nên size là 2, ngoài ra còn có thể phải chứa thêm ký tự xuống dòng nên kích thước tối thiểu phải là 3… Có hàm fgetc hoặc getchar có thể đọc 1 ký tự nhưng nó có thể là khoảng trắng. Xài scanf cho lành.C++ là cout và cin. Còn C thì printf() và scanf()
Dạ em cảm ơn anh, em sẽ chạy thử đoạn mã code đây xem
& = reference operator ( = lấy địa chỉ của biến)
2 toán tử trên có từ C rồi.
Tuy nhiên C++ overload cái & để tạo ra reference variable và giúp né khỏi con quái vật pointer.
Nên thấy ntn là đảm bảo code viết bằng C++, không ít cũng nhiều :~
http://en.cppreference.com/w/cpp/language/reference
Có getchar() mà ko cần scanf.
Thực ra tham chiếu được sinh ra để hiện thực overload.
Thật à anh rogp10 :? (A có source nào nói không? Tại ý trên em tự nghiệm ra thôi )
Do vài lần màu mè disasm ra xem thì thấy nó hoạt động giống (gần như) y chóc pointer nên tưởng đẻ ra để diệt khẩu thằng pointer (mặc dù là ko tận gốc đc) =))
Tác giả của C++ nói vậy http://www.stroustrup.com/bs_faq2.html#pointers-and-references
Em chưa học tới con trỏ nhưng danh của nó đã lan ra nổi tiếng lắm. cũng khá mông lung:))