2013-06-12 3 views
0

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

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; 
    } 
    }  
+9

У некоторой отладки, вы? Переполнение стеки не облачный сервис отладки людей с питанием. –

ответ

4

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

if (isdigit(*buffer++))

С помощью этой линии вы уже на характер после цифры.

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

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