30/09/2018, 20:14
Cin.good(), cin.irgone(),
#include <iostream>
#include <string>
int OhGosh(std::string StupidUser)
{
std::cerr << StupidUser << std::endl;
return 1;
}
int main()
{
int num;
std::cout << "Enter a number: ";
std::cin >> num;
if ( !std::cin.good() ) return OhGosh("Why couldn't you have entered a number?");
std::cout << "Thanks, you entered " << num << "." << std::endl;
return 0;
}
Cho mình hỏi chương trình này sai chổ này nhưng mình không biết sửa sao cho nó hết sai, bạn giúp mình với và giải thích vì sao lại sửa như vậy?.
std::cerr << StupidUser << std::endl;
và
if ( !std::cin.good() ) return OhGosh("Why couldn't you have entered a number?");// mình không hiểu ý của nó lắm!
Với lại cho mình hỏi các lệnh cin.good(), cin.irgone(), cin.eof(), cin.fail(), cin.clear(),… ý nghĩa của các lệnh đó là gì vậy? Mình cảm ơn
Bài liên quan
Chương trình đơn giản là kiểm tra xem người dùng có nhập một số nguyên hay không, nếu nhập một số không hợp lệ, ví dụ “abcd” thì đưa ra báo lỗi và kết thúc chương trình, nếu nhập đúng thì in ra thông báo “Thanks,…”.
Hàm
cin.good()
kiểm tra trạng thái lỗi của stream (http://www.cplusplus.com/reference/ios/ios/good)cin.ignore()
sẽ bỏ qua một số ký tự từ dòng dữ liệu đầu vào (http://www.cplusplus.com/reference/istream/istream/ignore/).Bạn có thể tra cứu các thư viện khác trên: http://www.cplusplus.com/reference/istream/istream/
mình không giỏi tiếng anh lắm, cho mình hỏi là cerr là lệnh gì vậy?
với lại khi mình nhập vào một chuỗi kí tự thì nó lại không xuất ra gì cả mà tắt luôn chương trình vì sao vậy? thanks
Lệnh
cerr
sẽ in dữ liệu ra dòngstandard error
. Thông thường là in ra trình console bạn đang chạy chương trình.Trong TH này lệnh
std::cerr << StupidUser << std::endl;
sẽ in ra xâu ký tự StupidUser.Khác với
cerr
, lệnhcout
sẽ in dữ liệu ra dòngstandard output
, nên đầu ra của nó có thể làm đầu vào cho chương trình khác (theo kiểu pipeline).Sở dĩ có
cout
vàcerr
là để phân biệt giữa đầu ra và thông báo lỗi.