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

Minh Pham viết 22:29 ngày 30/09/2018

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/

Tri Ngo viết 22:25 ngày 30/09/2018

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

Minh Pham viết 22:20 ngày 30/09/2018

Lệnh cerr sẽ in dữ liệu ra dòng standard 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ệnh cout sẽ in dữ liệu ra dòng standard 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ó coutcerr là để phân biệt giữa đầu ra và thông báo lỗi.

Bài liên quan
0