Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2012, 20:32   #1
apeorin
Пользователь
 
Регистрация: 21.10.2012
Сообщений: 65
По умолчанию Возникли проблемы с функцией gets()

Здравствуйте. У меня возникли проблемы с функцией gets().

Вот исходник:
PHP код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
    
setlocale(LC_ALL"rus");
        
char sample[40];
cout << "Введите строку: ";
    
gets(sample);
cout << "Вот введенная Вами строка: " << sample;
getch();
return 
0;

И возник у меня вопрос... Почему когда я ввожу русский текст, в поле "Введите строку", в графе "Вот введенная Вами строка" оно выводит иероглифы? А вот с английским текстом все нормально.
apeorin вне форума Ответить с цитированием
Старый 21.10.2012, 21:24   #2
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Попробуй подключить данную библиотеку
попробуйте данный вариант

Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <windows.h>{ добавлено }
using namespace std;

int main()
{
    SetConsoleCP(1251);{ добавлено }
    SetConsoleOutputCP(1251);{ добавлено }
    setlocale(LC_ALL, "rus");
        char sample[40];
cout << "Введите строку: ";
    gets(sample);
cout << "Вот введенная Вами строка: " << sample;
getch();
return 0;
}
Там где добавил, оставил комментарий.
Люблю на ты.Я человек простой
Leshii вне форума Ответить с цитированием
Старый 21.10.2012, 21:49   #3
apeorin
Пользователь
 
Регистрация: 21.10.2012
Сообщений: 65
По умолчанию

Так оно вообще не воспринимает русский... Хотя если переключить шрифт в консоли на Lucida Console все прекрасно работает. Но будет ли оно работать где либо, вне моего компьютера?

Хотя если изменить расположение файла, или поменять ему имя и т.д оно опять не работает, сбивается шрифт.

А можно еще как-нибудь исправить проблему с русским языком?

Последний раз редактировалось apeorin; 22.10.2012 в 09:05.
apeorin вне форума Ответить с цитированием
Старый 21.10.2012, 23:35   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А почему через gets()
У тебя же есть iostream, а соответственно открыта дорога для cin и wcin для юникода (кажется так этот класс называется)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.10.2012, 08:55   #5
apeorin
Пользователь
 
Регистрация: 21.10.2012
Сообщений: 65
По умолчанию

Если использовать cin то оно будет считывать и выводить текст до первого пробела. У меня проблема с выводом русского текста в графе "Вот введенная Вами строка: "...

Последний раз редактировалось apeorin; 22.10.2012 в 09:00.
apeorin вне форума Ответить с цитированием
Старый 22.10.2012, 18:06   #6
zipo666
Пользователь
 
Регистрация: 01.11.2011
Сообщений: 42
По умолчанию

Надеюсь что помог :

Код:
void main()
{
	setlocale (LC_ALL,"RUS");

	char sample[40]={0};
	
	cout << "Введите строку : ";
	
	gets(sample);
	
	OemToChar(sample,sample);
	
	cout << "Введенная вами строка : " << sample << endl;
	
	system("PAUSE");
}
Сам давно искал ответ , ну собственно - у меня на 2008 VS все окейно работает
zipo666 вне форума Ответить с цитированием
Старый 22.10.2012, 18:21   #7
apeorin
Пользователь
 
Регистрация: 21.10.2012
Сообщений: 65
По умолчанию

Цитата:
Сообщение от zipo666 Посмотреть сообщение
Надеюсь что помог :

Код:
void main()
{
	setlocale (LC_ALL,"RUS");

	char sample[40]={0};
	
	cout << "Введите строку : ";
	
	gets(sample);
	
	OemToChar(sample,sample);
	
	cout << "Введенная вами строка : " << sample << endl;
	
	system("PAUSE");
}
Сам давно искал ответ , ну собственно - у меня на 2008 VS все окейно работает
Ошибку бьет


1>d:\visual studio 2010\projects\13\13\13.cpp(16): warning C4996: 'gets': This function or variable may be unsafe. Consider using gets_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\program files\microsoft visual studio 10.0\vc\include\stdio.h(277): см. объявление "gets"
1>d:\visual studio 2010\projects\13\13\13.cpp(18): error C2664: OemToCharW: невозможно преобразовать параметр 2 из "char [40]" в "LPWSTR"
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
apeorin вне форума Ответить с цитированием
Старый 22.10.2012, 19:16   #8
zipo666
Пользователь
 
Регистрация: 01.11.2011
Сообщений: 42
По умолчанию

Ага , знаю в чем проблема - секнду , - OemToCharA(sample,sample);
Замените , и все окей
zipo666 вне форума Ответить с цитированием
Старый 22.10.2012, 20:27   #9
apeorin
Пользователь
 
Регистрация: 21.10.2012
Сообщений: 65
По умолчанию

Цитата:
Сообщение от zipo666 Посмотреть сообщение
Ага , знаю в чем проблема - секнду , - OemToCharA(sample,sample);
Замените , и все окей
Спасибо большое) кажись работает Вот только я разницы не понял... Что изменилось то?.. Да и что за OemToChar() какова ее роль?..
apeorin вне форума Ответить с цитированием
Старый 22.10.2012, 21:21   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Если использовать cin то оно будет считывать и выводить текст до первого пробела
Это с какой стороны посмотреть:
Код:
#include <iostream>
#include <locale>

int _tmain(int argc, _TCHAR* argv[])
{
	char s[200];
	setlocale(LC_ALL,"Rissuan");
	std::cin.getline(s,200);
	std::cout<<s;
	std::cin.get();
	return 0;
}
не?
Цитата:
что за OemToChar() какова ее роль?
По факту - перекодировать из досовских кодировок в кодировку ANSI. Они различны.
В целом я бы сказал что эта функция малость устарела.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возникли проблемы с функциями FRATER1234 Общие вопросы C/C++ 10 08.10.2011 20:51
Установка Wordpress возникли проблемы misher WordPress и другие CMS 9 21.02.2011 09:34
Установка форума - возникли проблемы misher WordPress и другие CMS 18 10.02.2011 15:10
JQuery - возникли некоторые проблемы! hoza_syl JavaScript, Ajax 6 30.12.2009 23:11