Dev C++ không hiểu kí tự char(217) char(218) char(191) char(192)

Mấy bác cho em hỏi các kí tự char in ra kiểu này đúng ko ạ?
image
image
do em thấy mấy cái kí tự này có thể vẽ khung nhưng nó lại in ra như trên.
Em thắc mắc là DevC++ in đúng chưa.

Terminal trên Windows có vẻ theo CP-1252 encode, còn cái block kia là extend của MSDOS (link tham khảo https://en.wikipedia.org/wiki/Windows-1252)

Muốn in “lạ lạ” như vầy thì bạn nên tìm hiểu: string encode, terminal encode, và cả font nữa á bạn.

Với terminal + compiler “xịn” thì chỉ cần std::cout << "█"; là được đó bạn

5 Likes

bạn thử dùng wcout xem :3

kết quả mình ra như này, tra lại bảng extended ascii thì đúng

4 Likes

đúng rồi. của mình nó chạy theo cái bảng Windows-1252 (CP1252). mình sửa lại bình thường thì phải làm sao vậy

wout nó không in ra cái j hết. mình đang tìm cách để in ra như của bạn

bạn cho mình xem code đi

image

Giống MSDOS thì có CP437 https://en.wikipedia.org/wiki/Code_page_437
Bạn có thể thử code mình cóp trên mạng như sau

#include <iostream>
#include <windows.h>

int main() {
    SetConsoleCP(437);
    SetConsoleOutputCP(437);
    std::cout << (char)217 << "\n";
}

Nhưng mình không recommend cách này, bạn nên tham khảo cách xuất mã unicode ra terminal cho nó portable hơn nhé

6 Likes

Xài Boost.Nowide cho khỏe :V :V

Code này xài nowide standalone port bên vcpkg :V

#include <nowide/iostream.hpp>
#include <nowide/args.hpp>
#include <string>
namespace nwd = nowide;

int main(int argc, char** argv) {
    nwd::args args{argc, argv};
    if (argc < 2) {
        nwd::cout << "Nhập tên của bạn: ";
        std::string name;
        std::getline(nwd::cin, name);
        nwd::cout << "Xin chào, " << name << "\n";
    } else {
        nwd::cout << "Xin chào, ";
        for (int i = 1; i < argc; ++i)
            nwd::cout << argv[i] << " ";
        nwd::cout << "\n";
    }
}

image

ngon lành :joy:

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?