Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 66, средняя оценка - 4.64
Undrei
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 3
#1

Считывание в массив char с консоли - C++

13.10.2012, 23:52. Просмотров 10677. Ответов 7
Метки нет (Все метки)

не выходит считать массив чаров, после перевода строки консоль не закрывается, а просто переходит на др. строку и никак не реагирует, либо можно дальше вводить любые символы и сколько угодно переводить строки.

C++
1
2
3
4
5
6
7
i=0;
 
 char* S = new char[i];
 do {
 S[i] = getchar(); // так же пробовал cin.get(); пробовал строки и cin.getline(); не могу понять в чем ошибка.
 i++;
 } while (S[i-1] != '\n');
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2012, 23:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание в массив char с консоли (C++):

Считывание из файла в char' овский массив - C++
Да вопрос боян, но у меня почему-то все символы программа считывает, как один и тот же символ. Дайте пожалуйста код, который считает в...

Считывание текста из файла text в массив char - C++
Такая проблема, есть файл с текстом There are many big and small libraries everywhere in our country. They have millions of books in...

считывание с консоли ( не с клавы, а именно с консоли) - C++
нужно написать функцию которая возвращает string в котором написано 500 символов которые были выведены в консоли от начала. среда :...

Считывание с консоли С++ - C++
1.Мне нужно считать текст введенный пользователем с консоли и записать в переменную, он может быть довольно большим, и, естественно,...

Считывание файлов и консоли с++ - C++
Почему программа не считывает а с консоли? #include <iostream> #include <cstdio> using namespace std; int main() { ...

Из С в C++, считывание с консоли в цикле - C++
Доброго времени суток. Вот такой вот вопрос: В С очень удобно было делать вот такую штуку: for( ; scanf("%d", &a) ;){ .....; } ...

7
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.10.2012, 00:13 #2
Цитата Сообщение от Undrei Посмотреть сообщение
i=0; char* S = new char[i];
у вас массив из 0 элементов, простите, он вы куда записываете значения то?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
using namespace std;
 
int main(){
    setlocale(LC_ALL, "");
    const int SIZE = 100;
    char str[SIZE];
 
    cout << "Пожалуйста введите строку:\n";
    cin.get(str, SIZE);
    cout << "Вы ввели строку: " << str << endl;
    return 0;
}
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.10.2012, 00:35 #3
Уверены, что не считывает? А если так посмотреть?:
C++
1
2
3
4
5
6
7
8
9
int i= 0;
 char* S = new char[i];
 do 
 {
    S[i] = getchar(); 
    cout << S[i];
    if (S[i] == '\n') break;
    i++;
 } while (true);
Хотя нужно, как посоветовал panicwassano, объявить массив достаточного размера.
1
Undrei
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 3
14.10.2012, 19:03  [ТС] #4
panicwassano: динамический массив, сам под нужный размер подойдет вроде.

alsav22: спасибо, не сделал вывод для проверки ) оказалось, что результат bool функции не выводился, вроде все нормально, но все равно не выходит из консоли, но это уже дальше разбираться пойду.


p.s. нужен именно динамический, т.к. длина строки по задаче не известна, а лишнюю память байт в 100 грузить не нужно думаю. к тому же может не хватить заданного размера.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.10.2012, 07:15 #5
Цитата Сообщение от Undrei Посмотреть сообщение
panicwassano: динамический массив, сам под нужный размер подойдет вроде.
Совершенно нет. Это только объекты с автоматическим управлением памятью могут память под себя подгонять. Динамический - это массив, который создаётся в специальной области памяти (куче), не во время компиляции (как статические массивы), а во время выполнения программы (отсюда и название). Размер его, конечно, тоже нужно задавать (в отличие от статических массивов, размер может быть задан неконстантной переменной, во время исполнения кода). Пример я свой привёл только для того, чтобы показать, что запись в память происходит. Но, так как в С++, нет контроля выхода за пределы массива, то такая запись затирает данные, лежащие в памяти рядом с массивом. Так делать не нужно.

Добавлено через 22 минуты
Цитата Сообщение от Undrei Посмотреть сообщение
p.s. нужен именно динамический, т.к. длина строки по задаче не известна
Тут нужный размер делается так: берётся размер строки и создаётся динамический массив под этот размер. Например:
C++
1
2
3
4
5
6
7
8
9
cout << "Enter to string: ";
  
char *t = new char[255]; // на время выделяется память (с запасом) под строку 
cin.getline(t, 255); // чтение строки
 
char *s = new char[strlen(t) + 1]; // выделяется новая память под размер введённой строки
strcpy(s, t); // копируется строка в новую память
  
delete [] t; // ненужная память освобождается
1
Undrei
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 3
15.10.2012, 13:32  [ТС] #6
Тут нужный размер делается так: берётся размер строки и создаётся динамический массив под этот размер. Например:
C++
1
2
3
4
5
6
7
8
9
cout << "Enter to string: ";
  
char *t = new char[255]; // на время выделяется память (с запасом) под строку 
cin.getline(t, 255); // чтение строки
 
char *s = new char[strlen(t) + 1]; // выделяется новая память под размер введённой строки
strcpy(s, t); // копируется строка в новую память
  
delete [] t; // ненужная память освобождается
Спасибо, сделаем так.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
15.10.2012, 13:45 #7
Только не забудьте, после того, как строка уже не будет нужна, сделать:
C++
1
delete [] s;
1
Karmisha
2 / 2 / 1
Регистрация: 04.07.2013
Сообщений: 27
04.04.2014, 21:41 #8
Цитата Сообщение от panicwassano Посмотреть сообщение
#include <iostream>
using namespace std;
int main(){
* * setlocale(LC_ALL, "");
Можно просто вместо LC_ALL поставить 0 так... для себя )
0
04.04.2014, 21:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2014, 21:41
Привет! Вот еще темы с ответами:

Считывание данных из консоли - C++
Здравствуйте! Вот задача: есть программа, вызывающая посредством system() другую программу. Та, в свою очередь, печатает в консоль...

Считывание массива char - C++
Есть такой кусок кода, при выполнение не считывается массив name, а сразу просит ввести country. #define _CRT_SECURE_NO_WARNINGS ...

Ввод с консоли в *char - C++
Как ввести строку с консоли в переменную типа *char? Вот такой код не работает #include &lt;iostream.h&gt; char *string; void...

Считывание и вывод TCHAR из консоли - C++
Не могу сделать, не пойму, что идет не так. Текст не выводится. Хочу, чтобы из консоли считывался текст, заносился в szText и выводился на...


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

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

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