Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
1

char массив, get(), ввести больше символов чем в массиве

17.08.2013, 19:42. Показов 4231. Ответов 45
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream> 
using std::cin;
using std::cout;
using std::endl;
 
int main()
{
setlocale(LC_ALL,"");
 
char AAA[10];
char BBB[10];
 
cout << "Введите первый массив: ";
cin.get(AAA, 10);
 
cout << "Введите второй массив: ";
cin.get(BBB, 10);
 
system("pause");
return 0;
}
если я при вводе первого массива, введу больше 12 символов, допустим 12, то второй массив мне ввести не даст, как избавится от этого? cin.ignore() не помогает.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.08.2013, 19:42
Ответы с готовыми решениями:

Как заполнить массив char если заранее не известно сколько символов в массиве?
Есть массив с ведомым к-вом элементов, но в него могут ввести слово с любым к-вом элементов которое...

Можно ли в char строку копировать больше байт, чем ее размер?
char a = &quot;ab&quot;; strcpy(a, &quot;abcd&quot;); Можно ли так делать? Компилятор не ругнулся и при выполнении не...

Ввести в массив слов все слова из предложения, в которых гласных букв больше, чем согласных
В общем, задача 1 курса: Пользователь вводит предложение.. Нужно ввести в массив слов все слова из...

Задан символьный массив. Ввести с клавиатуры символ и вывести на консоль количество таких символов в массиве.
Помогите решить лабораторные: 1,Задан символьный массив. Ввести с клавиатуры символ и вывести...

45
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
17.08.2013, 22:07 21
Author24 — интернет-сервис помощи студентам
Согласен с тем, что тут определенно лучше пользоваться типом string, раз уж речь идет о С++ ...
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.08.2013, 22:18  [ТС] 22
Руки уже заплетаются, ну и мозг вместе с ним, не буду рыться в книге, там написано, почему лучше использовать char, я сейчас учу запись в файл, редактирование, чтение из файла, и вроде как, потому что там определенное количество в отличии от string, по этому приходится использовать массив char, я не думал что так сложно с "обрубкой" не нужных (превышающих лимит) символов.
Наверное проще использовать преобразовании string в char
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
17.08.2013, 22:20 23
Цитата Сообщение от VLK Посмотреть сообщение
не буду рыться в книге, там написано, почему лучше использовать char
Если в этой книге говорится про работу со строками в С++, тогда лучше выкинь её и найди другую.
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.08.2013, 22:22  [ТС] 24
Цитата Сообщение от castaway Посмотреть сообщение
Если в этой книге говорится про работу со строками в С++, тогда лучше выкинь её и найди другую.
выкинуть дейтела?
0
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
17.08.2013, 22:23 25
C++
1
2
3
4
5
6
7
const int MaxSize = 10;
string input
cin >> input;
if (input.size()>MaxSize)
   input.erise(input.begin()+10,input.end());
char blah[MaxSize+1]={0};
strcpy(blah,input.c_str());
или
C++
1
2
3
4
5
const int MaxSize = 10;
string input
cin >> input;
char blah[MaxSize+1]={0};
strncpy(blah,input.c_str(),MaxSize);
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
17.08.2013, 22:25 26
Цитата Сообщение от VLK Посмотреть сообщение
выкинуть дейтела?
А ты уверен что там так написано? (я Дейтела не читал, но слышал что книга не плохая)
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.08.2013, 22:26 27
Цитата Сообщение от VLK Посмотреть сообщение
не думал что так сложно с "обрубкой" не нужных (превышающих лимит) символов.
никаких сложной нет, это твоя невнимательность
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.08.2013, 22:28  [ТС] 28
Цитата Сообщение от Jupiter Посмотреть сообщение
никаких сложной нет, это твоя невнимательность
в чем именно заключается невнимательность
0
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
17.08.2013, 22:30 29
Это так, навскидку, а вообще, странно, что используется постоянно смесь C и C++. Либо вы классик, используете malloc, scanf("%10d",&a) и void*, либо вы новатор, и тогда ваш выбор new, cin и string.
А вообще, по стандарту вводиться должно без мусора.
попробуйте просто исправить
C++
1
2
char AAA[10] = {0};
char BBB[10] = {0};
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.08.2013, 22:32  [ТС] 30
Цитата Сообщение от castaway Посмотреть сообщение
А ты уверен что там так написано? (я Дейтела не читал, но слышал что книга не плохая)
char массив, get(), ввести больше символов чем в массиве


char массив, get(), ввести больше символов чем в массиве


вот в программе + описание, там написано почему

Или я опять что то не так понял?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
17.08.2013, 22:39 31
Цитата Сообщение от VLK Посмотреть сообщение
Или я опять что то не так понял?
Опять. Там написано что программа должна работать с "записями постоянной длины" и поэтому там используется массив символов типа char. Ткни меня носом где сказано что использование массивов символов правильней и удобней чем использование класса string.

Цитата Сообщение от icpu Посмотреть сообщение
Либо вы классик, используете malloc, scanf("%10d",&a) и void*
void * - не используется в С++ ?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.08.2013, 22:40 32
Цитата Сообщение от VLK Посмотреть сообщение
в чем именно заключается невнимательность
невнимательность заключается в причине по которой создана тема:
Цитата Сообщение от VLK Посмотреть сообщение
cin.ignore() не помогает.
и того что подавалось на ввод
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.08.2013, 22:45  [ТС] 33
Цитата Сообщение от castaway Посмотреть сообщение
Опять. Там написано что программа должна работать с "записями постоянной длины" и поэтому там используется массив символов типа char. Ткни меня носом где сказано что использование массивов символов правильней и удобней чем использование класса string.
Ну я только начинающий и по мне при работе с записью в файл лучше использовать фиксированную длину (особенно если ты начинающий ), а у string то она не фиксированная?

Добавлено через 2 минуты
Jupiter, но ведь рабочий вариант, он не позволяет вводить несколько слов через пробел
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
17.08.2013, 22:47 34
Цитата Сообщение от VLK Посмотреть сообщение
а у string то она не фиксированная?
Метод string::c_str() возвращает указатель с фиксированной длиной.
0
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
17.08.2013, 22:48 35
castaway, избегаются всеми возможными способами, ибо есть касты. По крайней мере приводить к пустоте по-хорошему нельзя. Баста.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
17.08.2013, 22:49 36
Цитата Сообщение от icpu Посмотреть сообщение
castaway, избегаются всеми возможными способами, ибо есть касты. По крайней мере приводить к пустоте по-хорошему нельзя. Баста.
Что ты сейчас сказал? Я ни черта не понял. Особенно не понял к чему ты это сказал..
0
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
17.08.2013, 22:56 37
Цитата Сообщение от castaway Посмотреть сообщение
void * - не используется в С++ ?
Для приведения типов используются static_cast, dynamic_cast, const_cast. Для хранения объектов - умные указатели. Для возможности хранить разные классы в одном массиве, их наследуют от одного предка, после чего вгоняют указатели в вектор.
Тип void* и приведение указателей к void* есть, но их использование может поделить вселенную на ноль нежелательно.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
17.08.2013, 23:09 38
icpu, ок. Не это не то о чем я хотел тебя спросить. Что может заменить тип void * в С++ и почему его нежелательно использовать?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.08.2013, 23:20 39
castaway, Иерархия, any и т.д. void* самый простой вариант конечно.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
17.08.2013, 23:26 40
ForEveR, мм.. что иерархия?
Я не беру в расчет сторонние либы типа boost. К примеру: не вижу причин заменять void * на boost::any в приложении типа "Hello, World!"
0
17.08.2013, 23:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.08.2013, 23:26
Помогаю со студенческими работами здесь

Двумерный массив. Определить, есть ли в данном массиве строка, содержащая больше положительных элементов, чем отрицательных.
Дан двумерный массив размером п*m, заполненный случайными числами. Определить, есть ли в данном...

Алгоритмы Маркова. A={a,b}. Если в P символов a больше, чем символов b, то выдать ответ a
A={a,b}. Если в P символов a больше, чем символов b, то выдать ответ a, если символов a меньше...

Построить машину Тьюринга. Если в P символов a больше, чем символов b, то выдать ответ a
A={a,b}. Если в P символов a больше, чем символов b, то выдать ответ a, если символов a меньше...

Консоль не позволяет ввести больше 254 символов
День добрый. Столкнулся с очень странной проблемой: в консоль нельзя ни вставить, ни ввести то...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru