Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
13 / 13 / 16
Регистрация: 23.04.2018
Сообщений: 110
1

Как заменить getchar()?

07.10.2018, 21:41. Показов 2214. Ответов 9
Метки нет (Все метки)

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>
#include <cstdio>
 
using namespace std;
 
void init(char *&c,int &n) {
    char e;
    cout << "Enter the machine brand" << endl;
    c = new char;
    while ((e = getchar()) != '\n') 
        c[n++] = e;
    c[n] = '\0';
}
 
int main() {
    int n = 0;
    char *c;
    init(c,n);
    cout << c;
    return 0;
}
Можно ли как то обойтись без getchar()?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2018, 21:41
Ответы с готовыми решениями:

как работает getchar() ?
int c; c=getchar(); cout &lt;&lt; c; Набираю на клаве число 123 Cout выдает число 49 ??? ...

Уточнение как работает getchar();
Я ввёл 4 символа в оператор getchar(); и нажал &lt;Enter&gt;. Количество введённый символов получается 5?...

Функцию getchar нужно заменить на считывание строки до пробела
функцию getchar нужно заменить на считывание строки до пробела, помогите...даже не знаю с чего...

Как работает функция getchar?
Здравствуйте. Не совсем понимаю как работает функция getchar. Нашёл такое описание: Функция...

9
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
07.10.2018, 21:44 2
Цитата Сообщение от Adrian_One Посмотреть сообщение
c = new char;
Цитата Сообщение от Adrian_One Посмотреть сообщение
c[n++] = e;
Это еще что?
0
13 / 13 / 16
Регистрация: 23.04.2018
Сообщений: 110
07.10.2018, 21:55  [ТС] 3
SuperKir,
Цитата Сообщение от SuperKir Посмотреть сообщение
c = new char;
Выделение памяти для строки.
Цитата Сообщение от Adrian_One Посмотреть сообщение
while ((e = getchar()) != '\n') c[n++] = e;
Присваивание переменной e символа, а после вносим ее в массив.
0
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
07.10.2018, 22:02 4
Если я правильно понял, то так.
C++
1
while ((e = cin.get()) != '\n')
Кстати да, это чушь.
Цитата Сообщение от Adrian_One Посмотреть сообщение
c = new char;
1
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
07.10.2018, 22:09 5
Цитата Сообщение от Adrian_One Посмотреть сообщение
Выделение памяти для строки.
Строки из 1 символа?)
0
13 / 13 / 16
Регистрация: 23.04.2018
Сообщений: 110
07.10.2018, 22:14  [ТС] 6
SuperKir, если Я не ошибаюсь, то инициализация может выполнятся сразу при объявлении динамического объекта, либо последовательно через указатель. Код работает...
0
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
07.10.2018, 22:36 7
Цитата Сообщение от Adrian_One Посмотреть сообщение
Код работает...
Работает потому, что менеджер памяти выделяет не один байт, а сразу блок. Попробуйте ввести относительно большой фрагмент текста, и гарантированно получите segmentation fault.
0
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
07.10.2018, 22:45 8
Adrian_One, Разницу между:
C++
1
c = new char;
и
C++
1
c = new char[10];
Видите?
Для 'c' в первом случае выделен блок памяти размера 'char', для второго случая - блок из 10 'char' (если совсем грубо).
Если начать лезть не в свою (не для нас предназначенную) память, то кто его знает, что можно наворотить.
0
13 / 13 / 16
Регистрация: 23.04.2018
Сообщений: 110
07.10.2018, 22:48  [ТС] 9
Цитата Сообщение от valen10 Посмотреть сообщение
Попробуйте ввести относительно большой фрагмент текста, и гарантированно получите segmentation fault.
Нет...Все равно работает
0
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
07.10.2018, 22:50 10
Да собственно вот что можно наворотить. Тестовая программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
int main()
{
    char *c = new char;
    char *d = new char[100];
    size_t n = 0;
 
    while (n < 10000) {
        c[n++] = 'A' + n - 1;
    }
 
    return 0;
}
Для c выделяется просто char, для d - уже массив. В цикле изменяется только содержимое предполагаемого массива c (на самом деле - не массива). Количество итераций выбрано от балды. По шагам выполняем до тех пор, пока не начнут изменяться значения массива d. Вот и доказательство.
Миниатюры
Как заменить getchar()?  
1
07.10.2018, 22:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2018, 22:50
Помогаю со студенческими работами здесь

Как с помощью getchar ввести цифру?
ввожу 5 а выводится 53 в чём проблема? #include &lt;stdio.h&gt; int main(){ int n = (int) getchar();...

Не понимаю как использовать функцию getchar()
Мне нужно что бы при нажатий на определенную клавишу прога выходила из консоли, это мая первая...

Как принимать литеру забоя (backspace) через getchar()?
Возник вопрос: как вообще ловить литеру забоя? она просто не воспринимается инструкцией getchar(),...

Как преобразовать возвращаемое значение getchar() из int в char
Я хочу написать собственную функцию ввода и вот её код: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;...


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

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