#include "stdafx.h"
#include<iostream>
#include<string>
#include<io.h>
#include<fcntl.h>
#include<Windows.h>
using namespace std;
class Students {
int code;
wstring fullname;
wstring phonenumber;
wstring birthday;
public:
void getData();
void setData();
};
void Students::setData() {
wcout << L"Nhập mã sinh viên: ";
cin >> code;
wcout << L"Nhập tên sinh viên: ";
getline(wcin >> ws, fullname);
wcout << L"Nhập số điện thoại: ";
getline(wcin>>ws, phonenumber);
wcout << L"Nhập ngày sinh: ";
getline(wcin >> ws, birthday);
}
void Students::getData() {
wcout << L"Mã sinh viên: "<< code << endl;
wcout << L"Họ tên: " << fullname << endl;
wcout << L"Số điện thoại: " << phonenumber << endl;
wcout << L"Ngày sinh: " << birthday << endl;
}
int main()
{
_setmode(_fileno(stdin), _O_U16TEXT);
_setmode(_fileno(stdout), _O_U16TEXT);
HANDLE hdlconsole = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_FONT_INFOEX consoleFont;
consoleFont.cbSize = sizeof(consoleFont);
GetCurrentConsoleFontEx(hdlconsole, FALSE, &consoleFont);
memcpy(consoleFont.FaceName, L"Consolas", sizeof(consoleFont.FaceName));
Students *sv = new Students;
int n;
wcout << L"Nhập số lượng sinh viên: "; cin >> n;
for (int i = 0; i < n; i++) {
wcout << L"Nhập thông tin sinh viên thứ " << i + 1 <<": "<< endl;
sv->setData();
}
wcout << L"--------Danh sách sinh viên---------" << endl;
for (int i = 0; i < n; i++) {
sv->getData();
}
return 0;
}
Cách nhập và xuất tiếng Việt có dấu trong C++
Bạn đã chạy 2 lệnh này:
_setmode(_fileno(stdin), _O_U16TEXT);
_setmode(_fileno(stdout), _O_U16TEXT);
Thì cả chương trình, bắt buộc phải dùng wcout
và wcin
nhé
cảm ơn bạn mình sửa đc rồi. cho mình hỏi khi mình nhập gõ kiểu Telex nó ko đc @@
wao, thank nhiều nhé, có gì không biết xin chỉ giáo thêm
lần đầu biết thêm cái lmgtfy này, hay quá
nó bị lỗi gì v bạn, mình mới #include thôi à
Qt cài vào Visual Studio khó lắm đấy, bạn lên mạng kiếm tut tích hợp vào VS 2015, hoặc xài luôn Qt Creator cho mau.
à, ý là phải xài tool vào hả, vậy không được rồi, tại thầy mình bắt phải thao tác nhập xuất xử lý file với dữ liệu unicode, mà làm sao bắt ông thầy cài tool được
Bạn có cách nào khác không
hay lắm, thank nhiều nhé bạn
Bạn cho mình hỏi, cái phần này trong code của bạn là đặt font hiển thị là consolas phải không ?
CONSOLE_FONT_INFOEX consoleFont;
consoleFont.cbSize = sizeof(consoleFont);
GetCurrentConsoleFontEx(hdlConsole, FALSE, &consoleFont);
memcpy(consoleFont.FaceName, L"Consolas", sizeof(consoleFont.FaceName));
SetCurrentConsoleFontEx(hdlConsole, FALSE, &consoleFont);
Và giải thích giúp mình luôn cái memcpy là gì, hàm, thủ tục ???
Giải thích rõ giúp mk, mình đang học Pascal nhưng mk có thể đọc đc code C++ được.
Thủ tục copy vùng nhớ đó bạn, gán cho nội dung của FaceName bằng L"Consolas"
.
CONSOLE_FONT_INFOEX
là 1 struct mà trong đó, member FaceName
luôn là 1 mảng WCHAR
, 32 phần tử.
memcpy(consoleFont.FaceName, L"Consolas", sizeof(consoleFont.FaceName));
memcpy
là thủ tục copy vùng dữ liệu trong bộ nhớ, cái gì copy được là nó copy, nó copy theo số BYTE
, L"Consolas"
thực ra là pointer trỏ đến chuỗi đó (trong .rdata của app), sizeof(consoleFont.FaceName)
là 64 (1 phần tử WCHAR là 2 byte), bạn phải học full cơ bản C/C++, hiểu được chính xác về bản chất C/C++ mới hiểu được, tham khảo: http://www.cplusplus.com/reference/cstring/memcpy/
P.S: thật sự là nên học C/C++ đi đôi với ASM.
Tuy có hơi lâu (2 năm chứ mấy) . Nhưng mình cũng xin góp ý tý.
Bạn có thể dùng lệnh chuyển gói CHCP
của console để viết tiếng Việt.
Cụ thể là
#include <iostream>
int main() {
system("chcp 65001");
std::cout << "Việt Nam vô địch";
return 0;
}
Hmm. . . sau một hồi nghiên cứu thì theo cách này mk thấy chỉ xuất được chứ chưa nhập đc, chắc lại phải làm theo Ngọc tỷ tỷ rồi.
@MeigyokuThmn
làm sao để trở lại bình thường được vậy, nếu dùng thế thì ko dùng kiểu biến float đc??
mấy chú code thì comment cho người ta hiểu với
Bạn giải thích code được không ?? Viết vậy không hiểu
mn ơi cho e hỏi với ạ
e gõ được tiếng việt nhưng khi chạy thì nó lại ra lỗi ngôn ngữ ạ
ai sửa giúp e với
tại sao mình chạy lại có lỗi này nhỉ “_O_U16TEXT’ was not declared in this scope”