Çözüldü C++, setlocale Türkçe karakter girdilerini bozuyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Volkann1234

Hectopat
Katılım
10 Nisan 2021
Mesajlar
29
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Windows 10 üzerinden Visual Studio 19 kullanıyorum.
Aşağıdaki kod ve çıktılarıyla da göstermeye çalıştığım gibi nedense setlocale kullanınca konsol uygulamasına girdiğim Türkçe karakterler kafayı yiyor.
Kod:
#include <iostream>
#include <locale.h>
#include <string>
using namespace std;

int main()
{
    setlocale(LC_ALL, "Turkish");
    string word;
 
    cout << "ğöşüçı" << endl;
    cout << "Input: ";
    cin >> word;
    cout << word << endl;
}

Bunu çalıştırınca sonuç böyle:
Kod:
ğöşüçı
Input: ğöşüçı
§"Y?┼?

Ama eğer setlocale'i silersem sonuç buna dönüşüyor:
Kod:
÷■³²
Input: ğöşüçı
ğöşüçı

Bunun neden olduğunu bir türlü çözemedim.
Screenshot (soldaki setlocale ile, sağdaki değil):
 
Çözüm
Geniş karakter dizeleriyle çalışırsan sorun yaşama ihtimalin azalır..

C++:
#include <iostream>
#include <string>
#include <fcntl.h>
#include <io.h> //vc++

int main()
{

    std::wstring metin;
    _setmode(_fileno(stdout), _O_U16TEXT);
    _setmode(_fileno(stdin), _O_U16TEXT);

    std::wcout << L"türkçe metin!\n";
    std::wcin >> metin;
    std::wcout << metin;
    return 0;
}
Geniş karakter dizeleriyle çalışırsan sorun yaşama ihtimalin azalır..

C++:
#include <iostream>
#include <string>
#include <fcntl.h>
#include <io.h> //vc++

int main()
{

    std::wstring metin;
    _setmode(_fileno(stdout), _O_U16TEXT);
    _setmode(_fileno(stdin), _O_U16TEXT);

    std::wcout << L"türkçe metin!\n";
    std::wcin >> metin;
    std::wcout << metin;
    return 0;
}
 
Son düzenleme:
Çözüm
Bunları ilk defa görüyorum, tam olarak nedir bu?
Ama bende hata veriyor bu kod nedense, _setmode diyen kısımlar altı kırmızı gösteriyor. ("_setmode" tanımlayıcısı tanımlı değil)
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…