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

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

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

Студворк — интернет-сервис помощи студентам
Здрасьте! Есть необходимость посимвольно заполнить массив. Реализация моей задачи выглядит вот так:
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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.10.2018, 21:41
Ответы с готовыми решениями:

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

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

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

9
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
07.10.2018, 21:44
Цитата Сообщение от Adrian_One Посмотреть сообщение
c = new char;
Цитата Сообщение от Adrian_One Посмотреть сообщение
c[n++] = e;
Это еще что?
0
13 / 13 / 16
Регистрация: 23.04.2018
Сообщений: 110
07.10.2018, 21:55  [ТС]
SuperKir,
Цитата Сообщение от SuperKir Посмотреть сообщение
c = new char;
Выделение памяти для строки.
Цитата Сообщение от Adrian_One Посмотреть сообщение
while ((e = getchar()) != '\n') c[n++] = e;
Присваивание переменной e символа, а после вносим ее в массив.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
07.10.2018, 22:02
Если я правильно понял, то так.
C++
1
while ((e = cin.get()) != '\n')
Кстати да, это чушь.
Цитата Сообщение от Adrian_One Посмотреть сообщение
c = new char;
1
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
07.10.2018, 22:09
Цитата Сообщение от Adrian_One Посмотреть сообщение
Выделение памяти для строки.
Строки из 1 символа?)
0
13 / 13 / 16
Регистрация: 23.04.2018
Сообщений: 110
07.10.2018, 22:14  [ТС]
SuperKir, если Я не ошибаюсь, то инициализация может выполнятся сразу при объявлении динамического объекта, либо последовательно через указатель. Код работает...
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
07.10.2018, 22:36
Цитата Сообщение от Adrian_One Посмотреть сообщение
Код работает...
Работает потому, что менеджер памяти выделяет не один байт, а сразу блок. Попробуйте ввести относительно большой фрагмент текста, и гарантированно получите segmentation fault.
0
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
07.10.2018, 22:45
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  [ТС]
Цитата Сообщение от valen10 Посмотреть сообщение
Попробуйте ввести относительно большой фрагмент текста, и гарантированно получите segmentation fault.
Нет...Все равно работает
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
07.10.2018, 22:50
Да собственно вот что можно наворотить. Тестовая программа:
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.10.2018, 22:50
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru