Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 01.09.2015
Сообщений: 29
1

Передача строки в функцию

15.09.2015, 19:14. Показов 1949. Ответов 43
Метки нет (Все метки)

Добрый, вечер.
Есть функция
C++
1
2
3
void Func(wstring st){
wcout<<st.at(i); //убрал ненужное, но смысл оставил.
}
Так вот, если я инициализирую некоторую строку внутри функции - вывод нормальный, а если строка передается в функцию - выводит только латиницу.

В чем может быть проблема?

и еще, подкиньте хорошую статейку про организацию исходников. Как правильно подключать внешние файлы (h, cpp), как их линковать (что бы не было двойного определения функции). Спасибо
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2015, 19:14
Ответы с готовыми решениями:

Передача строки в функцию
Как передать строку s типа string в функцию?

Передача строки в функцию
Здравствуйте. Помогите пожалуйста)) void concatenation_Str(char* string) { char buff; cout...

Передача строки в дружественную функцию
Доброго времени суток! Помогите пожалуйста исправить программу( было много попыток, но все тщетно),...

Передача строки в функцию system
можно ли каким либо образом передать system значение String допустим есть string c=&quot;primer&quot;;...

43
802 / 532 / 157
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
15.09.2015, 19:18 2
попробуй в main 1ой строкой прописать
C++
1
setlocale(0, "");
0
0 / 0 / 0
Регистрация: 01.09.2015
Сообщений: 29
15.09.2015, 19:20  [ТС] 3
ой, забыл уточнить, у меня линух и локаль выставлена
C++
1
setlocale(LC_CTYPE, "");
0
802 / 532 / 157
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
15.09.2015, 19:25 4
Dembele, а ты выставь как у меня, авось поможет. Если нет, то попробуй
C++
1
setlocale(LC_ALL, "");
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
15.09.2015, 19:28 5
А откуда она берётся, строка эта? Может, там кодировка другая.
0
0 / 0 / 0
Регистрация: 01.09.2015
Сообщений: 29
15.09.2015, 19:31  [ТС] 6
никакого эффекта, вообще

Добавлено через 1 минуту
nmcf, передаю как
C++
1
Func(L"текст");
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
15.09.2015, 19:31 7
Ты покажи откуда берёшь строку и как передаёшь.
0
802 / 532 / 157
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
15.09.2015, 19:32 8
Dembele, попробуй вставлять варианты предложенных ранее вариантов не в main() а в саму функцию
0
0 / 0 / 0
Регистрация: 01.09.2015
Сообщений: 29
15.09.2015, 19:33  [ТС] 9
nmcf, я ее так в функцию и передаю. Т.е. функция должна принимать wstring, так я его и передаю в параметр
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
15.09.2015, 19:35 10
В самом начале main() должно быть:
C++
1
std::global(std::locale(""));
setlocale() убрать. Ну ещё так попробуй: Func(wstring(L"текст"));
0
0 / 0 / 0
Регистрация: 01.09.2015
Сообщений: 29
15.09.2015, 19:39  [ТС] 11
nmcf,
C++
1
2
3
/home/bloodfall/heroland/main.cpp:727: error: 'global' is not a member of 'std'
     std::global(std::locale(""));
     ^
C++
1
Func(wstring(L"текст")); // никакого эффекта
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
15.09.2015, 19:49 12
C++
1
std::locale::global(std::locale(""));
0
0 / 0 / 0
Регистрация: 01.09.2015
Сообщений: 29
15.09.2015, 19:54  [ТС] 13
nmcf, все так же не выводит кириллицу
C++
1
std::locale::global(std::locale(""));
Добавлено через 1 минуту
мне кажется, проблема не в локали.
оно же выводит нормально, если внутри функции строку объявить.
C++
1
2
3
4
Func(){
wstring st = L"текст";
wcout << st;
}
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
15.09.2015, 20:23 14
Функция и вызов функции в одном файле?
А если не константу передавать, а переменную? Или так: void Func(wstring &st)
0
0 / 0 / 0
Регистрация: 01.09.2015
Сообщений: 29
15.09.2015, 20:32  [ТС] 15
nmcf, и функция, и ее вызов в 1 файле. Сделал так:
C++
1
2
3
4
5
6
7
8
void Func(wstring &st){
wcout << st;
}
 
void Func2() {
wstring str = L"текст";
Func(str);
}
эффекта нет. еще идеи?
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
15.09.2015, 20:41 16
А у тебя внутри программы локали нигде не переключаются? Вставь непосредственно перед cout установку локали.
0
0 / 0 / 0
Регистрация: 01.09.2015
Сообщений: 29
15.09.2015, 20:47  [ТС] 17
nmcf, выловил несколько странных багов:
C++
1
2
3
4
5
6
7
int main()
{
    locale::global(locale(""));
    wstring st = L"фыва asdf"; //выводит, как и положено фыва asdf
    wcout << st; // на этом месте консоль виснет, будто вечный цикл.
    cout<<"Разверните терминал и не изменяйте его размеры после этого, это необходимо для корректного отображения игры. Нажмите любую клавишу для продолжения...";
    getch();
в функции
C++
1
2
3
std::locale::global(std::locale(""));
    wstring st = L"фыва asdf";
    wcout << st; //
выводит только латиницу
0
Эксперт С++
4974 / 3081 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
15.09.2015, 20:49 18
Цитата Сообщение от Dembele Посмотреть сообщение
выводит, как и положено фыва asdf
о_О как? Там же просто переменная!
Может всё-таки виснет на 7-й строке?
0
lss
935 / 863 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
15.09.2015, 20:51 19
У меня, в ubuntu, с такой локалью: setlocale(LC_CTYPE, ""), всё правильно выводит (Code Blocks, в параметрах редактора выставленно UTF-8).
0
0 / 0 / 0
Регистрация: 01.09.2015
Сообщений: 29
15.09.2015, 20:51  [ТС] 20
castaway, эм, там переменная st, в которую заносится лонговские "фыва asdf", а дальше просто вывожу строку на экран.
выводит не сама переменная, а wcout, строкой ниже
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2015, 20:51

Передача строки string в функцию
Завтра экзамен а я печатаю строки :D Что хочу: ввожу две строки, передаю их в функцию по...

Передача в функцию строки и копирование
Что это за безобразие выводит? #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std;...

Передача строки в функцию и ее вывод
Добрый день. Есть функция main() которая сначала считывает с клавиатуры 2 строки: password и...

Передача строки в конструктор или в функцию
Как передать в конструктор класса строку без массивов, да и в функцию как передать строку и дальше...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.