В коде, который я написал, я беру строку, проверяю, содержит ли она только десятичные цифры, а затем преобразовываю строку в 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;
}
}
Имейте в виду, что с isdigit(*buffer++)
ты первый звонок isdigit
со значением *buffer
а затем увеличивает указатель на единицу.
if (isdigit(*buffer++))
С этой линией вы уже на персонаже после цифра
Так что вы должны увеличивать, когда у вас ничего не получается, и ломаться, когда у вас получается.
… и, как следует из комментария, попробуйте выполнить некоторую отладку самостоятельно. Ваш баг не очень сложен для отладки, даже с некоторыми cout
и без отладчика и так (попробуйте вставить cout << buffer << endl
в тебе пока петля.
Вы можете использовать оператор извлечения для анализа содержимого потока непосредственно в int
:
std::cin >> numEntries;
Для проверки ошибок прочитайте http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt2.