Вот мой код:
int main ()
{
const int MAX = 10;
char *buffer = nullptr; // used to get input to initialize numEntries
int ARRAY_SIZE = 20; // default is 20 entries
int numEntries;
success = false;
while (!success)
{
delete buffer;
buffer = nullptr;
buffer = new char [MAX];
cout << "How many data entries:\t";
cin.getline(buffer, MAX, '\n');
cout << endl << endl;
while (*buffer)
{
if (isdigit(*buffer++))
success = true;
else
{
success = false;
break;
}
}
}
numEntries = atoi(buffer);
Проблема в том, что когда я ввожу любое число, он просто отображает «numEntries = 0», и он падает, если я ввожу строку.
Может кто-нибудь объяснить, что именно происходит?
Это ваша проблема:
+----+----+----+----+----+
| | | | | |
+----+----+----+----+----+
^ ^
| |
Start End
Start
указатель возвращается из new []
выражение.while (*buffer)
итеративно перемещает указатель в позицию, обозначенную End
,End
передается delete
, Это не верно. Start
хочет быть переданным delete
,Что вы можете сделать, это сохранить второй указатель на результат new []
выражение для использования с delete
(что также должно быть delete []
) Например:
int main ()
{
const int MAX = 10;
char *buffer = nullptr; // used to get input to initialize numEntries
char *bufferptr = nullptr; // <- ADDED
int ARRAY_SIZE = 20; // default is 20 entries
int index = 0;
success = false;
while (!success)
{
delete [] bufferptr; // <- CHANGED
buffer = nullptr;
buffer = new char [MAX];
bufferptr = buffer; // <- ADDED
cout << "How many data entries:\t";
cin.getline(buffer, MAX, '\n');
cout << endl << endl;
while (*buffer)
{
if (isdigit(*buffer++))
success = true;
else
success = false;
}
}
}
Других решений пока нет …