Я пробую динамическое распределение памяти.Я хочу динамически распределять память, достаточно для строки из 10 символов.Если пользователь вводит более 10 символов, я хочу, чтобы в getline было извлечено только 10 символов (плюс символ новой строки, я полагаю), а затем они были сохранены в динамической памяти правильного размера, напечатаны и удалены.Ниже мой код:
#include <iostream>
using namespace std;
int main() {
char cont = 'N';
do{
char *input = new char[11];
cout << "This program dynamically allocates memory for a string of
characters up to 10 in length\n";
cout << "Enter a string less than or equal to 10 characters:\n";
cin.getline(input, 11, '\n');
cout << "Your string is:\n";
cout << input << endl << endl;
delete input;
cout << "Would you like to enter another? \"Y\" to continue\n";
cin >> cont;
cin.ignore();
} while (toupper(cont) == 'Y');
Все отлично работает, если пользователь вводит до 10 символов.Это может повториться навсегда.
Однако, если пользователь вводит более 10 символов, программа не предлагает пользователю продолжить и вместо этого просто завершает работу.ABCDEFGHIJ работает, но ABCDEFGHIJK ломается.
Я подумал, что это потому, что в cin все еще есть что-то, что читается на входе, и это не «Y», и поэтому программа завершается.Однако, если вы пройдете один цикл и сначала установите cont в 'Y', а затем введете ABCDEFGHIJK, программа станет бесконечной, не вводя ничего для перезаписи 'Y'.
Еще одна вещь, которую я заметил, это getline, кажется, тянетправильное количество символов, в которых хранятся символы ABCDEFGHIJ на входе, даже если был введен ABCDEFGHIJK. Я подумал, что, возможно, «K» оставлено в cin, поэтому я попытался ABCDEFGHIJY, но «Y» не был сохранен в продолжение.
Я также пробовал различные варианты cin.clear () перед следующим запросом ввода, но ничего не получалось.
Мне кажется, я неправильно понимаю, как getline работает с перегрузкой, которую я использую.