Не упомянут очень важный момент! cin для строк работает, но если вы впишите текст, к примеру "Hello world" то в переменную попадут только символы до первого пробела. Чтобы записать весь текст нужно использовать как раз getline(), а подключается он в директиве
Даровыч! По поводу ввода символов на кириллице. Русского языка вы там не увидите, так как setlocale работает ТОЛЬКО (как я понял) на вывод (То что вы пишите после команды cout) данных. Нашел решение через смену кодировок самой консоли. Русскоязычная кодировка представлена как "cp1251". (Как понял я, вы указываете кодировку "1251", программа это читает и переводит это в свою кодировку "866", и с учетом этого показывает вам русские символы. Как то так, изучите это самостоятельно) Что делать? Подключаете библиотеку "Windows.h" для работы с командами "SetConsoleCP"(Грубо говоря, работает как setlocale, ставит указанную вами кодировку на вывод данных) и "SetConsoleOutputCP"(Тоже самое, только кодировка ставится на ввод данных, что и решает данную проблему) то есть Include SetConsoleCP(1251); SetConsoleOutputCP(1251); после этого setlocale вам не пригодится в коде, как я понял, но это не точно. Ну и, так как я сам учусь (много что не понимаю), изучите тему "кириллицы в консолях" самостоятельно!!! Удачи.
Дополню. cin читает текст до первого пробела (то есть, если вы введете "Hello World", он выдаст только "Hello"). Вместо него используйте getline(cin, words) (words - название переменной string)
для новичков тут самое оно. я полез в дебри и там масса костылей. выяснилось что _flushall() в новых версиях VS уже не чистит буфер, а нужно использовать cin.ignore(), а функция max конфликтует, если подключена библиотека window.h и т.д. так что для начала обучения - то что надо.
возможно тебе надо поменять кодировку консоли, я честно не помню какую именно и как именно это сделать, но скорее всего проблема в самой конфигурации консоли
Даровыч! По поводу ввода символов на кириллице. Русского языка вы там не увидите, так как setlocale работает ТОЛЬКО (как я понял) на вывод (То что вы пишите после команды cout) данных. Нашел решение через смену кодировок самой консоли. Русскоязычная кодировка представлена как "cp1251". (Как понял я, вы указываете кодировку "1251", программа это читает и переводит это в свою кодировку "866", и с учетом этого показывает вам русские символы. Как то так, изучите это самостоятельно) Что делать? Подключаете библиотеку "Windows.h" для работы с командами "SetConsoleCP"(Грубо говоря, работает как setlocale, ставит указанную вами кодировку на вывод данных) и "SetConsoleOutputCP"(Тоже самое, только кодировка ставится на ввод данных, что и решает данную проблему) то есть Include SetConsoleCP(1251); SetConsoleOutputCP(1251); после этого setlocale вам не пригодится в коде, как я понял, но это не точно. Ну и, так как я сам учусь (много что не понимаю), изучите тему "кириллицы в консолях" самостоятельно!!! Удачи.
Это ещё одна проблема... Вводит только до пробельного символа. Надо просто явно указать символ до которого читается . По умолчанию это пробельный символ. Но если указать конец строки то будет считывать всю строку до ввода конца строки который вводится когда мы нажимаем клавишу Enter. Сам символ конца строки при этом в ввод не попадает. Это символ ' '.
@@ДенисТретьяков-т3ч Нормальные люди вводят строки через getline. Причём такой способ никогда не генерит ошибки и всегда даёт конкретный результат. Возможно не тот ,что вы ожидали. Но его можно анализировать. автор не слишком компетентен в этом вопросе. Но даже простой ввод целого числа вот так int n; cin >> n; легко может подвесить вашу программу если вы будете вводить не число которое преполагается а нечто другое... Просто эта команда нормально работает только если вы вводите именно число. А если среди введённых символов нет ни одного допустимого она жёстко зависает... Если же вы вводите через getline всё проходит без проблем и вы получаете строку которую потом можете запарсить и сказать что не так ввели. Иначе ваша прога зависнет и вам придётся её гасить возможно чрез диспетчер задач... Вот так работает "не атавизм"...
расскажите что делать, если при получении информации от пользователя на русском языке через string получается ерунда из рандомного колличества символов? мб надо вводить что то помимо setlocale, что бы руссификатор появился?
SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода решает проблему
Рассказано слишком мало. И не совсем правильно string это контейнер для хранения строки которая внутри. Это не сама строка а её оболочка. сейчас все работают именно со string а не с массивом символов. Просто так удобно... Но символьные константы по прежнему используют. Надо бы про них рассказать несколько поподробнее. А не просто привести пример даже не сказав что это такое.
@@KirillShilets судя по чудовищному количеству неточностей и откровенной ложной информации, чел вообще не знает С++. и за подобное гуано он еще и деньги берет в платных курсах? жесть.
Пространство имен - это декларативная область, в рамках которой определяются различные идентификаторы (имена типов, функций, переменных, и т. д.) с гугла скопировал для тебя
я не уверен но прочёв другие коментарии вы возможно столкнулись с проблемой что как описывают другие: cin читает текст до первого пробела (то есть, если вы введете "Hello World", он выдаст только "Hello"). Вместо него используйте getline(cin, words) (words - название переменной string)
Проблема здесь в том, что вы используете строку типа string, которая является неизменяемой (immutable) в C++. Когда вы пытаетесь изменить символ по индексу, как в строке words[0] = 'W';, это не будет работать, потому что строки типа string в C++ не поддерживают прямое изменение символов по индексу.
судя по чудовищному количеству неточностей и откровенной ложной информации, чел вообще не знает С++. и за подобное гуано он еще и деньги берет в платных курсах? жесть.
Не упомянут очень важный момент! cin для строк работает, но если вы впишите текст, к примеру "Hello world" то в переменную попадут только символы до первого пробела. Чтобы записать весь текст нужно использовать как раз getline(), а подключается он в директиве
Я удивлён, что этого больше никто не написал, когда увидел что он говорит, волосы дыбом встали
Если челы не знают, то пишется так:
getline(cin, var);
где var это переменная, в которую записывается значение
@@darkybebraСпасибо огромное за приведённый вами пример очень помог.
Привет C-строки
@@darkybebra А если надо записать кириллицей? Просто когда я ввожу сбивается кодировка(Даже если подключен setlocale(LC_ALL, "RU"))
Даровыч!
По поводу ввода символов на кириллице. Русского языка вы там не увидите, так как setlocale работает ТОЛЬКО (как я понял) на вывод (То что вы пишите после команды cout) данных.
Нашел решение через смену кодировок самой консоли. Русскоязычная кодировка представлена как "cp1251". (Как понял я, вы указываете кодировку "1251", программа это читает и переводит это в свою кодировку "866", и с учетом этого показывает вам русские символы. Как то так, изучите это самостоятельно)
Что делать? Подключаете библиотеку "Windows.h" для работы с командами "SetConsoleCP"(Грубо говоря, работает как setlocale, ставит указанную вами кодировку на вывод данных) и "SetConsoleOutputCP"(Тоже самое, только кодировка ставится на ввод данных, что и решает данную проблему)
то есть
Include
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
после этого setlocale вам не пригодится в коде, как я понял, но это не точно.
Ну и, так как я сам учусь (много что не понимаю), изучите тему "кириллицы в консолях" самостоятельно!!! Удачи.
Дополню. cin читает текст до первого пробела (то есть, если вы введете "Hello World", он выдаст только "Hello"). Вместо него используйте getline(cin, words) (words - название переменной string)
Уважаемый Гоша Дударь можете сделать курс по фронтэнду или бекэнду?
Спасибо автору за обучение!!!
Огромное спасибо за видео!
для новичков тут самое оно. я полез в дебри и там масса костылей. выяснилось что _flushall() в новых версиях VS уже не чистит буфер, а нужно использовать cin.ignore(), а функция max конфликтует, если подключена библиотека window.h и т.д. так что для начала обучения - то что надо.
Как всегда супер!
дякую++
у меня проблема. Когда я заменяю текст с помощью команды cin >> words на русский, то у меня выводит рандомный набор символов, хотя setlocale я ставил
возможно тебе надо поменять кодировку консоли, я честно не помню какую именно и как именно это сделать, но скорее всего проблема в самой конфигурации консоли
Попробуй
getline(cin, name);
Даровыч!
По поводу ввода символов на кириллице. Русского языка вы там не увидите, так как setlocale работает ТОЛЬКО (как я понял) на вывод (То что вы пишите после команды cout) данных.
Нашел решение через смену кодировок самой консоли. Русскоязычная кодировка представлена как "cp1251". (Как понял я, вы указываете кодировку "1251", программа это читает и переводит это в свою кодировку "866", и с учетом этого показывает вам русские символы. Как то так, изучите это самостоятельно)
Что делать? Подключаете библиотеку "Windows.h" для работы с командами "SetConsoleCP"(Грубо говоря, работает как setlocale, ставит указанную вами кодировку на вывод данных) и "SetConsoleOutputCP"(Тоже самое, только кодировка ставится на ввод данных, что и решает данную проблему)
то есть
Include
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
после этого setlocale вам не пригодится в коде, как я понял, но это не точно.
Ну и, так как я сам учусь (много что не понимаю), изучите тему "кириллицы в консолях" самостоятельно!!! Удачи.
@@zxtired7804 ого, спасибо большое, позже попробую
Есть проблемка. Когда я вводил строку с пробелами, в words записалось только первое слово
Вместо cin(переменная); попробуй getline(cin, переменная);
getline не обращает внимание на пробелы, ест с ними
Так что уважаемый автор. getline не атавизм, как я думаю, а вполне рабочая система
Это ещё одна проблема... Вводит только до пробельного символа. Надо просто явно указать символ до которого читается . По умолчанию это пробельный символ. Но если указать конец строки то будет считывать всю строку до ввода конца строки который вводится когда мы нажимаем клавишу Enter. Сам символ конца строки при этом в ввод не попадает. Это символ '
'.
@@ДенисТретьяков-т3ч Нормальные люди вводят строки через getline. Причём такой способ никогда не генерит ошибки и всегда даёт конкретный результат. Возможно не тот ,что вы ожидали. Но его можно анализировать. автор не слишком компетентен в этом вопросе. Но даже простой ввод целого числа вот так int n; cin >> n; легко может подвесить вашу программу если вы будете вводить не число которое преполагается а нечто другое... Просто эта команда нормально работает только если вы вводите именно число. А если среди введённых символов нет ни одного допустимого она жёстко зависает... Если же вы вводите через getline всё проходит без проблем и вы получаете строку которую потом можете запарсить и сказать что не так ввели. Иначе ваша прога зависнет и вам придётся её гасить возможно чрез диспетчер задач... Вот так работает "не атавизм"...
Добрый вечер, где можно задать вопрос?
Зачем тут рассматривать как это было в C, думаю новичков только запутает
помоги пожалуста, а что нужно делать если когда я в cin пишу текс с двумя словами выводит только певрое слово?
после назначения переменой типа string, укажи так: getline(cin, название твоей переменной);
тогда будет читать и пробел
@@дима-д7з5й спасибо
@@дима-д7з5й спасибо, помог
@@дима-д7з5йхорошо, что есть комментарии
расскажите что делать, если при получении информации от пользователя на русском языке через string получается ерунда из рандомного колличества символов? мб надо вводить что то помимо setlocale, что бы руссификатор появился?
setlocale(LC_ALL, "RU");
или посмотри точно у тебя русская раскладка, а не другая
@@l1tezmmb Я поменял кодировку на "RU" но всё равно в переменную сохраняется какая-та ерунда. Есть какой нибудь способ исправить это?
@@motionflash878 system("chcp 1251>nul") устанавливает русский и на ввод и на вывод одновременно. Почему и как долго объяснять.
@@kpanat спасибо я уже решил эту проблему при помощи SetConsoleCP(1251);
SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
решает проблему
Рассказано слишком мало. И не совсем правильно string это контейнер для хранения строки которая внутри. Это не сама строка а её оболочка. сейчас все работают именно со string а не с массивом символов. Просто так удобно... Но символьные константы по прежнему используют. Надо бы про них рассказать несколько поподробнее. А не просто привести пример даже не сказав что это такое.
Это вводные уроки, его полный курс платный, неужели нельзя мозгами подумать
@@KirillShilets судя по чудовищному количеству неточностей и откровенной ложной информации, чел вообще не знает С++. и за подобное гуано он еще и деньги берет в платных курсах? жесть.
Я не понимаю, что за пространство имен, и откуда они появляются?
Пространство имен - это декларативная область, в рамках которой определяются различные идентификаторы (имена типов, функций, переменных, и т. д.)
с гугла скопировал для тебя
@@diowh9948 какой же ты великолепный. Почти полубог
пространство имен оно как дом/квартира, все кто внутри могут обращается к друг-другу напрямую, а для тех кто снаружи нужно знать еще и адрес дома 🐸🐸
@@TSlex Понял спасибо
36 секунд назад 🙂
5:25 Кодировка с самого начала не работала. Вместо кириллицы выдаёт ?????, по одному ? на каждый символ кириллицы
9:14 если введете текст на русском, то будет абракадабра
топ
у меня не инциализированна перменная i (в word[i], почему то не видит ее компилятор.
; лишняя?
А почему я не могу вводить длинный текст в string?
я не уверен но прочёв другие коментарии вы возможно столкнулись с проблемой что как описывают другие:
cin читает текст до первого пробела (то есть, если вы введете "Hello World", он выдаст только "Hello"). Вместо него используйте getline(cin, words) (words - название переменной string)
а что если если хочешь ввести string с цифрами
Ничего, просто вводишь как обычный текст
2:56 а ещё нельзя было просто так взять и не обьявить длину массива или не указать то количество элементов, которое ты написал при обьявлении массива)
Когда нибудь я буду это учить но сначала эбану питон обучение и потом и на си успею
а что мешает начать изучать и Си?)))) Я учу C, C++, C# и Python и ниче)))). Уже 4.5 года прогаю
@@Massima2004 мега мозг?
@@Massima2004 тигр
@@燁-g6c не. Просто мне программирование очень нравится. У меня прям дикий огонь к этому делу)))) Прям обожаю
@@燁-g6c живу этим делом
го lua
Проблема здесь в том, что вы используете строку типа string, которая является неизменяемой (immutable) в C++. Когда вы пытаетесь изменить символ по индексу, как в строке words[0] = 'W';, это не будет работать, потому что строки типа string в C++ не поддерживают прямое изменение символов по индексу.
все работает, ты с чем-то путаешь
@@яйцопожаренное если написать как у него( то есть с частью когда С и С++) да, но если ты напишешь только часть когда С++ то нет
@@vada322 строки типа std::string в C++ поддерживают прямое изменение символов по индексу и даже поддерживают изменение своего размера (длины)
Скорее нельзя изменить значение переменной через ' = ' . а через индекс можно. Повидимому это ссылочный тип
судя по чудовищному количеству неточностей и откровенной ложной информации, чел вообще не знает С++. и за подобное гуано он еще и деньги берет в платных курсах? жесть.
первый
e
Чел, слишком много воды. Зачем мне знать как это работает на языке С если я С++ изучаю?
Про работу со строками ничего нет, плохо.