atoi () возвращает 0

В коде, который я написал, я беру строку, проверяю, содержит ли она только десятичные цифры, а затем преобразовываю строку в int. Тем не менее, в моем коде, atoi возвращает 0, а не строку как int, Может кто-нибудь сказать мне, где я облажался?

while (!sucess || 0 == Entries){
delete [] bufferptr;
buffer = nullptr;
buffer = new char [MAX];
bufferptr = buffer;

cin.getline(buffer, MAX, '\n');while (*buffer){
if (isdigit(*buffer++)){
success = true;
} else {
success = false;
break;
}
}
if (success){
numEntries = atoi(buffer);
cout << endl << numEntries << endl;
}
}

0

Решение

Имейте в виду, что с isdigit(*buffer++) ты первый звонок isdigit со значением *buffer а затем увеличивает указатель на единицу.

if (isdigit(*buffer++))

С этой линией вы уже на персонаже после цифра

Так что вы должны увеличивать, когда у вас ничего не получается, и ломаться, когда у вас получается.

… и, как следует из комментария, попробуйте выполнить некоторую отладку самостоятельно. Ваш баг не очень сложен для отладки, даже с некоторыми cout и без отладчика и так (попробуйте вставить cout << buffer << endl в тебе пока петля.

4

Другие решения

Вы можете использовать оператор извлечения для анализа содержимого потока непосредственно в int:

std::cin >> numEntries;

Для проверки ошибок прочитайте http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt2.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector