Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > бесконечный цикл


Автор: reddevil 27.6.2005, 11:52
Помогите с выходом из цикла
листинг на С++[LIST
Код

int number; // переменная количества гистогорамм
    
loop:    cout<<"Enter the numbers of gistogram: ";
    
    cin>>number;// инициалиизация переменной количества гистогорамм
    cout<<endl;// вывод пустой строки
        
    if (!isNumber(number)) :stena 
    {
        cout<<"\nMissing entered, try onece agane.\n\n";
        goto loop;
    }
.....................................................................................................................[LIST]
bool isNumber(int i)
{
    if ((0<=i)&&(65555>=i))
        return true;
    else
        return false;
}

при вводе буквы, функция isNumber() возвращает false, а повторного ввода не происходит, сразу идет следующая проверка, результат false и т.д.

кто знает где здесь глюк хелп плиз smile

Автор: rsm 27.6.2005, 12:27
Бесконечный цикл организуют несколько иначе:
Код

while(1)
{
    cout << "Enter number of histogram: ";
    cin >> number;
    if(isNumber(number))
        break;
    cout << "\nInvalid number!" << endl;
}

Автор: sergejzr 27.6.2005, 12:35
Просто ты обьявил number как int. В этом случае прога ожидает именно целое число и неопределена для char. При такой декларации условие всегда будет верным smile

goto вообще не надо использовать. Забудь как страшный сон. Он нужен в весьма редких случаях.

Код

#include <stdlib>
#include <iostream>

bool doInput(char &number)
{
     cout<<"Enter the numbers of gistogram: ";
     cin>>number;
     if(('0'<=number)&&('9'>=number)) //здесь проверка, являеся ли знак числом
        return true; 
     cout<<"\nWrong input, try once again.\n\n";
     return false;   
}

int main(int argc, char *argv[])
{
   char number='a'; // переменная количества гистогорамм. Именно char так как юзер может задать всё что угодно
   int answer;

   while(!doInput(number));
   answer=number-'0'; //преобразуем букву в число

    cout<<"Input OK "<<answer<<endl;

    return 0;
}

Автор: reddevil 27.6.2005, 15:05
спасибо за ответ, БУДУ пробовать
А goto , я использую только когда
создаю цикл, потом все меняю

Автор: reddevil 27.6.2005, 15:22
Еще раз спасибо, а как быть с тем
что число может быть не только однозначное?
У меня курсовая, препод просил чтоб в каждом
задании была проверка на ввод данных.
Есть и такое где надо отличать ввел пользователь
символ или цифру, но уже float?

Хотя я уже smile !!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)