01/10/2018, 01:14

Nhập phân số vào console

Em vừa mới tiếp xúc với lập trình C++, em vừa viết chương trình giải phương trình bậc 2. Khi em nhập giá trị cho a là phân số ví dụ như 4/5 thì console bỏ qua các bước nhập giá trị vào b, c. Nhưng khi em nhập là 0.8 thì console vẫn xử lý bình thường ạ. Vậy cho em hỏi có cách nào để nhập phân số cho tiện trong việc tính toán không ạ?
Em cảm ơn trước ạ!

明玉 viết 03:15 ngày 01/10/2018

Bạn phải lập trình parser để nhận diện phân số, hoặc xài thư viện viết sẵn. Tốt nhất là bỏ qua, học C++ cho rành đã.

rogp10 viết 03:21 ngày 01/10/2018

Kiểu phân số không có sẵn. Học đến class thế nào cũng có bài tập tạo cái này thôi.

Giờ bạn học mấy hàm nhập xuất với định dạng cho kĩ, khó hơn C nhiều.

Người bí ẩn viết 03:27 ngày 01/10/2018

4/5

Cái đó từ từ tính bạn

Học đến class thế nào cũng có bài tập tạo cái này thôi.

Struct cũng dùng được chứ anh nhỉ

Đỗ Nhiên viết 03:25 ngày 01/10/2018

class tạo nhưng vd nhập vào là vẫn phải nhạp là bao nhiêu b là bao nhiêu hay nhập một phát là 4/5 luôn hả anh

rogp10 viết 03:18 ngày 01/10/2018

Ừ thực ra từ khóa “struct” với “class” là như nhau trong C++. Với lại compiler C++11 trở đi có 1 số tiêu chí nhận dạng cái nào là struct (hay POD) và cái nào là class.

@Do_Nhien tùy bạn muốn viết ntn thôi. Trong sách thấy ghi “nhập tử số… nhập mẫu số…” để nhấn mạnh vào trọng tâm (tạo class và các toán tử).

Đỗ Nhiên viết 03:26 ngày 01/10/2018

mình ko làm c++ bạn à mình đang học c# mình chỉ thắc mắc làm thế nào để nhập 4/5 vào màn hình console nhỉ

viết 03:15 ngày 01/10/2018

xài Boost rational nè:

#include <iostream>
#include <boost/multiprecision/gmp.hpp>
namespace bm = boost::multiprecision;

int main()
{
    bm::mpq_rational q{4,5};
    std::cout << q << "\n"; //in ra 4/5
    std::cin >> q; //nhập vào 3/2
    std::cout << q << "\n"; //in ra 3/2
}

thêm linker option -lgmp thôi. Vô tư xài phân số. Nhưng phải install Boost.Multiprecision và GMP

demo: http://rextester.com/NWLO14139

Đỗ Nhiên viết 03:24 ngày 01/10/2018

code tay cái kiểu nhập như vậy được ko bạn nhỉ

Người bí ẩn viết 03:19 ngày 01/10/2018

Kinh thật

viết 03:28 ngày 01/10/2018

code tay cái kiểu nhập như vậy được ko bạn nhỉ

được:

int tu, mau;
char sep;
std::cin >> tu >> sep >> mau;

nhưng phân số mà xài int tử mẫu thì có vấn đề, ví dụ:
1/65535 + 1/65537 sẽ ko tính được vì mẫu > 231. Bởi vậy phải xài big int trong thư viện GMP.

Trần Hoàn viết 03:24 ngày 01/10/2018

Mình nghĩ là nên để a,b,c là std::string, sau đó viết trường hợp cho việc nhập số, nhập số thập phân và nhập phân số. Phức tạp về code nhưng dễ về phía người nhập

Đỗ Nhiên viết 03:25 ngày 01/10/2018

nhỡ cái biến sep mà họ nhập các ký tư khác thì sao bạn

viết 03:25 ngày 01/10/2018

thì check thêm 1 dòng if (sep != '/') //xử lý nó

kiểm tra input xấu thì vô vàn cách, khổ lắm. Install MSYS2 + MinGW-w64 rồi xài Boost rational có khi còn lẹ hơn:

install MSYS2
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-x86_64-gdb
pacman -S mingw-w64-x86_64-boost

vậy là chiến được rồi

Đỗ Nhiên viết 03:30 ngày 01/10/2018

try catch bạn thánh c++ thật

Bài liên quan
0