198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
1

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

17.08.2013, 19:42. Показов 4225. Ответов 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
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.08.2013, 19:58 2
Цитата Сообщение от VLK Посмотреть сообщение
cin.ignore() не помогает.
а какие параметры передавал?
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.08.2013, 20:08  [ТС] 3
Цитата Сообщение от Jupiter Посмотреть сообщение
а какие параметры передавал?
без параметров - cin.ignore()
с одним параметром - cin.ignore(10)
с двумя параметрами - cin.ignore(10, ' ')

результат одинаковый
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
17.08.2013, 20:37 4
А как здесь вообще может помочь cin.ignore() ?
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.08.2013, 20:39  [ТС] 5
Цитата Сообщение от castaway Посмотреть сообщение
А как здесь вообще может помочь cin.ignore() ?
не знаю, на всякий случай ставил

это, а что тут поможет?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.08.2013, 20:41 6
Цитата Сообщение от VLK Посмотреть сообщение
без параметров - cin.ignore()
с одним параметром - cin.ignore(10)
с двумя параметрами - cin.ignore(10, ' ')
результат одинаковый
и какой при этом был ввод? пробел вводил в 3 варианте?
0
0 / 1 / 0
Регистрация: 01.02.2012
Сообщений: 16
17.08.2013, 20:41 7
fflush(stdin) - после первого ввода.
1
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
17.08.2013, 20:43 8
Цитата Сообщение от VLK Посмотреть сообщение
это, а что тут поможет?
Тут поможет std::setw.
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <iomanip>
 
int main()
{
    char buff[10];
    std::cin >> std::setw( 5 ) >> buff;
    std::cout << buff << std::endl;
}
Добавлено через 52 секунды

Не по теме:

Jupiter, метод cin.ignore немного для другого служит.

0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.08.2013, 20:45  [ТС] 9
Цитата Сообщение от Jupiter Посмотреть сообщение
и какой при этом был ввод? пробел вводил в 3 варианте?
char массив, get(), ввести больше символов чем в массиве
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
17.08.2013, 20:45 10
Цитата Сообщение от ElwooD07 Посмотреть сообщение
fflush(stdin) - после первого ввода.
Не следует пользоваться такой конструкцией, она не определена стандартом. К тому же никак не решит проблему автора.
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.08.2013, 20:50  [ТС] 11
castaway, fflush(stdin) сработала, т.е. работает корректно, а вот

Цитата Сообщение от castaway Посмотреть сообщение
Тут поможет std::setw.
не помогло
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.08.2013, 20:51 12
VLK, а теперь введи такую же строку только на один символ меньше(от a до k на клаве включительно )

Добавлено через 30 секунд
Цитата Сообщение от VLK Посмотреть сообщение
fflush(stdin) сработала, т.е. работает корректно
выкинь это из головы, прислушайся к castaway
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.08.2013, 20:57  [ТС] 13
Jupiter, я ошибся в ответе на это:
Цитата Сообщение от Jupiter Посмотреть сообщение
и какой при этом был ввод? пробел вводил в 3 варианте?
не прочитал до конца, нет, пробел я не ставил.

Короче, программа, надо ввести имя, потом фамилию, соответственно это будут массивы char, если вдруг попадутся несознательные граждане и решат ввести больше заявленных 10 символов, надо решить эту проблему

Добавлено через 37 секунд
то, что предлагает castaway, не помогло
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
17.08.2013, 21:05 14
Цитата Сообщение от Jupiter Посмотреть сообщение
выкинь это из головы, прислушайся к castaway
Я от части был не прав. Без cin.ignore тут не обойтись. Стабильный вариант выглядит так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <iomanip>
 
int main()
{
    char a[10];
    char b[10];
 
    std::cin >> std::setw( 10 ) >> a;
    std::cin.ignore( 256, '\n' );
    std::cin >> std::setw( 10 ) >> b;
 
    std::cout << a << std::endl;
    std::cout << b << std::endl;
}
1
Jupiter
17.08.2013, 21:09
  #15

Не по теме:

Цитата Сообщение от castaway Посмотреть сообщение
Я от части был не прав
ну я про fflush(stdin)

1
castaway
17.08.2013, 21:11
  #16

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
ну я про fflush(stdin)
Это да, fflush( stdin ) однозначно не следует использовать.

0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.08.2013, 21:36  [ТС] 17
castaway, еще вопрос
А если мне надо все тоже самое, только ввести 2 слова (через пробел) в один массив, как тогда быть?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.08.2013, 21:46 18
VLK, std::istream::getline
0
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
17.08.2013, 21:52  [ТС] 19
Цитата Сообщение от Jupiter Посмотреть сообщение
т.е. записать в string а потом переводить в массив char?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.08.2013, 21:55 20
Цитата Сообщение от VLK Посмотреть сообщение
т.е. записать в string а потом переводить в массив char?
нет, глянь код по ссылке.
не путай
метод std::istream::getline с
глобальной функцией std::getline для std::string
0
17.08.2013, 21:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.08.2013, 21:55
Помогаю со студенческими работами здесь

Двумерный массив. Определить, есть ли в данном массиве строка, содержащая больше положительных элементов, чем отрицательных.
Дан двумерный массив размером п*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 символов
День добрый. Столкнулся с очень странной проблемой: в консоль нельзя ни вставить, ни ввести то...


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

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

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