Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/74: Рейтинг темы: голосов - 74, средняя оценка - 4.73
Undrei
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 3
1

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

13.10.2012, 23:52. Просмотров 14079. Ответов 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' овский массив
Да вопрос боян, но у меня почему-то все символы программа считывает, как один и...

Считывание текста из файла text в массив char
Такая проблема, есть файл с текстом There are many big and small libraries...

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

Считывание с консоли С++
1.Мне нужно считать текст введенный пользователем с консоли и записать в...

Считывание файлов и консоли с++
Почему программа не считывает а с консоли? #include <iostream> #include...

7
panicwassano
594 / 562 / 104
Регистрация: 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
5442 / 4837 / 831
Регистрация: 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
5442 / 4837 / 831
Регистрация: 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
5442 / 4837 / 831
Регистрация: 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
Есть такой кусок кода, при выполнение не считывается массив name, а сразу...


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

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

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