Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
-3 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 36

Указатель на строку char*

09.06.2020, 16:24. Показов 6946. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните дураку (мне), можно ли как-то строку из cin запихнуть в char? Чтобы был не посимвольный ввод, а сразу вся строка преобразовывалась в массив из символов?

Без использования string
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.06.2020, 16:24
Ответы с готовыми решениями:

Конструкция const char* или указатель на временную строку
Добрый день! Вроде уже не первый день пишу на C++, но задался вопросом: int main(){ const int* a = {1,2,3}; const...

Объяснить работу функции, возвращающей указатель на указатель на char
Добрый день! Сможете объяснить что означает запись char **InputFile(int &strings);? Почему именно двойное **? Буду очень благодарна...

array char* to char* (значения массива указателей в один указатель)
Как сложить(или вывести в формате char*) все значения массива указателей(char *) воедино, то есть сложить строки и назначить результату...

30
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
09.06.2020, 16:29
C++
1
2
char str[20]
std::cin.getline(str, 19);
0
-3 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 36
09.06.2020, 16:34  [ТС]
20 символов. Строка ограничена.

Добавлено через 36 секунд
Я попытался сделать такое, но не сработало:
C++
1
2
char *str;
cin >> str;
0
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
09.06.2020, 16:40
Цитата Сообщение от CiscoLooser Посмотреть сообщение
char *str;
Это указатель на char, а не массив char. Сравните с моим.
и cin >> вводит только слово, а не всю строку.
Можете поменять размер массива, как вам нужно
C++
1
char str[число];
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,234
09.06.2020, 16:44
Цитата Сообщение от CiscoLooser Посмотреть сообщение
char *str;
str в этом случае, это переменная имеющая тип char* (указатель на char).
В ней сидит мусор, т.к. туда ничего не записывали.

C++
1
2
3
4
5
6
7
8
9
cout<<"введите максимальный размер строки:";
int n;
(cin>>n).get();
char* str=new char[n+1];
cout<<"введите строку:";
std::cin.getline(str, n+1);
// используем str
....
delete[] str; // освобождаем память
0
-3 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 36
09.06.2020, 17:05  [ТС]
Сделал так. Почему строка вводится нормально, но ввод N пропускается? То есть только ввел строку, нажал Enter, должно запросить ввод N, но эта команда тупо пропускается и код выполняется без нее.
Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main() 
{ 
    setlocale(LC_ALL, "Russian");
 
    char* str = new char[10];
    int N, M;
 
    cout << "Введите строку: ";
    cin.getline(str, 10);
    cout << "Введите N: ";
    cin >> N;
    cout << "Введено N: " << N;
 
    delete[] str;
 
    return 0;
}
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
09.06.2020, 17:17
Цитата Сообщение от CiscoLooser Посмотреть сообщение
Почему строка вводится нормально, но ввод N пропускается?
Если так:
C++
1
2
3
4
5
6
7
8
9
10
    char* str = new char[100];
    int N, M;
 
    cout << "Введите строку: ";
    cin.getline(str, 100);
    cout << "Введите N: ";
    cin >> N;
    cout << "Введено N: " << N;
 
    delete[] str;
0
-3 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 36
09.06.2020, 17:23  [ТС]
То же самое

Добавлено через 2 минуты
Странно, когда добавляю любой сепаратор в getline, то все работает нормально... Что за бред, господи...
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
09.06.2020, 17:24
Цитата Сообщение от CiscoLooser Посмотреть сообщение
То же самое
Это уже сказки. Это полный код?
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,679
09.06.2020, 17:25
CiscoLooser, птсле getline вызовите cin.ignore()
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
09.06.2020, 17:28
Цитата Сообщение от Annemesski Посмотреть сообщение
птсле getline вызовите cin.ignore()
Это для чего?
Миниатюры
Указатель на строку char*  
0
41 / 37 / 8
Регистрация: 24.07.2013
Сообщений: 219
09.06.2020, 17:30
Не понимаю вы вообще о чем товарищи?? Ограничения cin в том что оно читает до разделителя а не по одному символу по этому будет работать и такой код:
C++
1
2
3
const int size = 20;
    char s5[size];
    cin >> s5;
Проблема лишь в том что если ты хочешь взять не одно а несколько слов такой варик уже не подойдет!
Это уже и будет ограничением cin
0
Модератор
Эксперт С++
 Аватар для zss
13766 / 10960 / 6490
Регистрация: 18.12.2011
Сообщений: 29,234
09.06.2020, 17:32
CiscoLooser, что-то Вы совсем не поняли идеологию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main() 
{ 
    setlocale(LC_ALL, "Russian");
    cout<<"введите максимальный размер строки:";
    int n;
    cin>>n; // вводим максимальный размер
    cin.get();  // пропускаем символ '\n' который остался от ввода n
    char* str=new char[n+1];  // выделили память n+1 Байт
    cout<<"введите строку:";
    cin.getline(str, n+1);  // ввели строку
// используем str
....
   delete[] str; // освобождаем память
}
0
-3 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 36
09.06.2020, 17:32  [ТС]
@Annemesski , Помогло, спасибо. Но что этот оператор делает? Почему без него getline работает криво с cin?
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,679
09.06.2020, 17:33
nd2, судя по поведению у ТС остаются символы в потоке после считывания строки
0
-3 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 36
09.06.2020, 17:34  [ТС]
Нет, это вопрос не понят. С этим я давно уже разобрался. Была проблема с getline, решилась через cin.ignore(). Что этот оператор делает? Почему без него работает криво cin при комбинации с getline?
0
 Аватар для ram876
759 / 456 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
09.06.2020, 17:37
CiscoLooser, Подозреваю, что вы до этого вводили строку больше выделенной
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
09.06.2020, 17:37
Цитата Сообщение от CiscoLooser Посмотреть сообщение
Почему строка вводится нормально, но ввод N пропускается?
Ничего не пропускается. Вы что-то выдумываете.

Цитата Сообщение от CiscoLooser Посмотреть сообщение
Была проблема с getline, решилась через cin.ignore(). Что этот оператор делает? Почему без него работает криво cin при комбинации с getline?
Никакого "работает криво" нет. Все работает так, как и должно. Если вы в getline будете вводить больше данных , чем указанная вам же максимальная длина строки, то лишние данные останутся непрочитанными и пойдут в последующие операции чтения.

Именно это вы и делали, но почему-то стеснялись нам об этом сказать, а вместо этого гнали сюда какие-то никому не нужные "не работает" и "пропускает".
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
09.06.2020, 17:38
Цитата Сообщение от Annemesski Посмотреть сообщение
nd2, судя по поведению у ТС остаются символы в потоке после считывания строки
Что он и как там делает - это один он знает. Я про код, который предложил в 7-ом посте. Он что, больше чем 99 символов ввёл, что написал, что то же самое? Сомневаюсь. Значит какой-то свой код пробует.
0
-3 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 36
09.06.2020, 17:39  [ТС]
Ну, раз я выдумываю, то, думаю, можно закрыть тему, вопрос решен. Проблема - это выдумка! Спасибо, расходимся.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.06.2020, 17:39
Помогаю со студенческими работами здесь

В программе имеется следующий фрагмент: const char a='*'; char ch; как объявится указатель-переменная
В программе имеется следующий фрагмент: const char a='*'; char ch; как объявляется указатель-переменная на константу:

Чем отличаются указатель на строку и константный указатель на строку?
Просто обьясните, как такое возможно? char *a=&quot;fff&quot;; В чем отличие от этого? : const char *a=&quot;fff&quot;; Ведь так и так...

Ввести строку С-типа (char[] или char*). Вывести строку
Ввести строку С-типа (char или char*). Вывести строку. Объясните пожалуйста как делается)

Указатель на константную строку и имя массива как указатель
Изучаю C. У меня есть указатель на константную строку, и я хочу его изменить путем передачи в функцию. Это работает без проблем: ...

Указатель на char
Есть программка: #include&lt;iostream&gt; using namespace std; int main() { char *i; char str=&quot;1234567890&quot;; i=str; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru