Это мой первый вопрос о stackoverflow. Простите меня, если я не искал должным образом, но, похоже, я не нашел объяснения. Просто попытался привести пример из статей Бьюрн Струустгруп. Добавлены мои биты, чтобы увидеть, как массив меняет размер, когда я набираю текст.Почему getchar работает как буфер вместо работы в ожидании в реальном времени
Но, похоже, это не так! getchar() просто ждет, пока я закончил с вводом всех символов, а затем он выполнит цикл. Согласно логике, он фактически не переходит в цикл, не получает персонажа, не выполняет его действия, а затем итерации. Мне интересно, является ли это конкретной реализацией или предполагается, что это так?
Я нахожусь на Ubuntu 14.04 LTS, используя Codeblocks с gcc 4.8.2. Источник был в файлах cpp, если это имеет значение.
while(true)
{
int c = getchar();
if(c=='\n' || c==EOF)
{
text[i] = 0;
break;
}
text[i] = c;
if(i == maxsize-1)
{
maxsize = maxsize+maxsize;
text = (char*)realloc(text,maxsize);
if(text == 0) exit(1);
cout << "\n Increasing array size to " << maxsize << endl;
}
i++;
}
Выход следующим образом:
массив Размер теперь: 10 Пожалуйста, введите текст: это какой-то образец текста. Мне бы хотелось, чтобы память была перераспределена прямо здесь, но, видимо, это не так!
Увеличение размера массива до 20
Увеличение размера массива до 40
Увеличение размера массива до 80
Увеличение размера массива до 160
Вы вошли: это какой-то образец текста. Мне бы хотелось, чтобы память была перераспределена прямо здесь, но, видимо, это не так!
массив Размер теперь: 160
Вы должны указать страницу termios man и функцию tcsetattr, которая может помочь в настройке терминала ввода-вывода. –
Очень хорошее предложение. К сожалению, я не знаком с termios. Если да, вы можете опубликовать его в качестве ответа. Я кратко добавил ваше предложение к ответу – Nidhoegger
Я попытался добавить фрагменты в начале и в конце программы. Оно работает! Но тогда часть (c == '\ n') не работает. Он застрял в цикле while навсегда. Я предполагаю, что это ожидаемое поведение, поскольку я прошел через SO Post. Есть ли способ, по которому я могу проверить, является ли введенный символ символом новой строки? –